我正在学习关于entity framework,并有问题! 有人可以澄清,如果我认为我无法从数据库中获得父母及子女的子女,是否正确? 例如… db.Parents .Include(p => p.Children) .Where(p => p.Children.Any(c => c.Age >= 5)) 这将返回所有有5岁以上孩子的父母,但是如果我重复通过Parents.Children收集,所有的孩子将在场(不只是5岁以上)。 现在查询确实对我有意义(我已经要求包括孩子,我已经得到了他们!),但是可以想象,在某些情况下,我希望将where子句应用于子集合。 问题: 我说的是正确的吗? 是否有可能得到父母,只是从数据库的一个子集,而不需要调用数据库的负载? 我的方式离开的标志? (不会是第一次)! 我发现了一些关于这个主题的博客和SOpost,但是没有什么能够解释我的小脑袋。 编辑 读过这个博客 (感谢达斯·刘易斯)…….我还是不明白! 在博客中给出的例子中,我可以看到如何通过一个Parent实例来实现它,但是我正在努力研究如何使用集合实现它。 我怎么能得到一个IEnumerable,其中每个父母都有一个过滤收集的儿童(年龄> = 5)? 进一步澄清: 在回答唐安德鲁的评论时,我在a)一个有5岁以上孩子的父母名单(只包括那些孩子)。 任何帮助感激, 谢谢。
使用dynamicLINQ库( 链接 ),是否容易注入? (如果是的话)如何防范呢? 安全考虑(entity framework)的一些背景: LINQ to Entities注入攻击: 尽pipe查询组合在LINQ to Entities中是可能的,但它是通过对象模型API执行的。 与实体SQL查询不同,LINQ to Entities查询不是使用string操作或串联组成的,而且它们不易受传统SQL注入攻击的影响。 由于dynamicSQL是使用string组成的,这是否意味着它可能容易受到注入向量? 或者,LINQ to SQL会根据Dynamic LINQ库中的基础数据types自动处理参数化值? 或者它是完全安全的,因为dynamic查询将在内存中执行,而不是针对SQL(从而否定SQL索引的好处)? 我一直在通过理解DynamicLibrary.cs代码,但我相信我可以轻松地忽略一些东西。 由于这个问题是关于dynamicLINQ库本身,这个问题可以被认为适用于linq-to-sql和linq-to-entities (尽pipe上面引用了entity framework)。
我试图build立一个使用LINQ to Entities的search页面,但是下面的代码给了我一个关于lte没有识别'Boolean StartsWith()的运行时错误。 代码编译得很好。 我怎样才能解决这个问题比把StartsWith过滤出来存储到一个存储过程更好? return from dp in dents.DirectoryPersonEntrySet where ((dp.LastName.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) || (dp.Department.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) || dp.Extension.StartsWith(searchTerm, StringComparison.CurrentCultureIgnoreCase)) select dp;
请帮忙。 我想弄清楚如何使用DATE或DATETIME在linq查询进行比较。 例如:如果我想为今天之前开始的所有员工名称,我会在SQL中做这样的事情: SELECT EmployeeNameColumn FROM EmployeeTable WHERE StartDateColumn.Date <= GETDATE() //Today 但是linq呢? DateTime startDT = //Today var EmployeeName = from e in db.employee where e.StartDateColumn <= startDT 上面的WHERE不起作用: exception详细信息:System.NotSupportedException:LINQ to Entities不支持指定的types成员“Date”。 仅支持初始化器,实体成员和实体导航属性。
我有一个应用程序,允许用户input他们花在工作上的时间,我试图获得一些良好的报告,这是利用LINQ to Entities。 由于每个TrackedTime都有一个TargetDate ,它只是DateTime的“Date”部分,所以按用户和date对时间进行分组相对比较简单(为简单起见,我省略了“where”子句): var userTimes = from t in context.TrackedTimes group t by new {t.User.UserName, t.TargetDate} into ut select new { UserName = ut.Key.UserName, TargetDate = ut.Key.TargetDate, Minutes = ut.Sum(t => t.Minutes) }; 由于DateTime.Month属性,用户和月份分组只是稍微复杂一点: var userTimes = from t in context.TrackedTimes group t by new {t.User.UserName, t.TargetDate.Month} into ut select new { UserName […]
我确定我已经在某个地方看到了这个问题的答案,但是因为我在SO或者谷歌上search了几个search词,所以无论如何我都会问这个问题。 在entity framework中,删除数据对象的唯一方法似乎是 MyEntityModel ent = new MyEntityModel(); ent.DeleteObject(theObjectToDelete); ent.SaveChanges(); 但是,这种方法要求首先将对象加载到控制器中,只是将其删除。 有没有办法删除仅引用其实例ID的业务对象? 如果使用Linq或Lambdaexpression式更聪明,那也可以。 但是,主要目标是避免加载数据只是为了删除它。
我是新来的使用LINQ to Entities(或者Entity Framework,无论他们在调用它),我写了很多这样的代码: var item = (from InventoryItem item in db.Inventory where item.ID == id select item).First<InventoryItem>(); 然后调用这个对象的方法如下: var type = item.ItemTypeReference; 要么 var orders = item.OrderLineItems.Load(); 检索儿童或相关对象。 我没有分析数据库或挖得太深,但我的猜测是,当我调用一个.Load()或一个*引用属性,我实际上是另一个调用数据库。 如果是这样的话,有什么办法让我的初始LINQexpression式中的那些对象?
假设我在SQL Server 2008中有以下表定义: CREATE TABLE Person (PersonId INT IDENTITY NOT NULL PRIMARY KEY, Name VARCHAR(50) NOT NULL, ManyMoreIrrelevantColumns VARCHAR(MAX) NOT NULL) CREATE TABLE Model (ModelId INT IDENTITY NOT NULL PRIMARY KEY, ModelName VARCHAR(50) NOT NULL, Description VARCHAR(200) NULL) CREATE TABLE ModelScore (ModelId INT NOT NULL REFERENCES Model (ModelId), Score INT NOT NULL, Definition VARCHAR(100) NULL, […]
我有一个控制台应用程序,我试图做的是每次运行应用程序,date和时间发送到我的数据库中的表。 表结构是这样的: FTPRuns ID int Last Run datetime 很简单。 我已经更新了我的应用程序中的model.edmx以反映这个新的变化,但是现在我得到了下面的错误,我不完全确定它是什么意思。 错误3002:从行1330开始的映射片段中的问题:表FTPRuns的键(FTPRuns.ID)的潜在运行时违规:列(FTPRuns.ID)在概念端映射到EntitySet FTPRuns属性(FTPRuns.ID),但它们不形成EntitySet的密钥属性(FTPRuns.ID,FTPRuns.LastRun)。 以下是我用来更新数据库的代码片段: using (ModelContainer ctn = new ModelContainer()) { try { FTPRun ftp = new FTPRun { LastRun = DateTime.Now }; ctn.FTPRuns.AddObject(ftp); int changes = ctn.SaveChanges(); Console.WriteLine(changes.ToString() + " Changes saved"); Console.WriteLine("The LastRun Date Has Been Updated"); } catch (InvalidOperationException ex) { Console.WriteLine(ex.ToString()); } […]
所以我有我的edmx。 然后我改变我的数据库一点点,改变一列从一个非空,以允许NULL。 我进入我的edmx,右键单击并select“从数据库更新模型” 现在我进入我的程序,它并没有实际更新…我不能把一个空列。 我需要做什么来正确地更新edmx? 谢谢。