Tag: entity framework

EntityFramework LINQ查询计数失败,但查询返回结果。 如何优化LINQ查询?

我有以下LINQ查询执行自我左外连接。 查询看起来有点复杂,但只是简单地进行自我连接(目的是将每条记录与前一个工作日的记录连接起来),然后进行一些参数化过滤。 var newBreakThreshold = decimal.Parse(WebConfigurationManager.AppSettings[“NewBreakThreshold”]); using (var dbContext = new NavFoToBoCompareDbContext()) { var query = from current in dbContext.NAVSummaries let currentWD = SqlFunctions.DatePart(“dw”, current.ValueDate) let currentPD = DbFunctions.AddDays(current.ValueDate, currentWD == 2 ? -3 : currentWD == 1 ? -2 : -1).Value join previous in dbContext.NAVSummaries on new { current.Portfolio, PD = currentPD } equals […]

修改entity framework中实体的属性会导致validation错误

我试图简单地加载一个实体,修改一个属性,然后将其保存回数据库。 var db = new NewsletterContext(); var newsletter = db.Newsletters.Find(x => x.ID==newsletterID); newsletter.SomeProperty = 5; db.SaveChanges(); 这会导致validation错误,因为当我执行Find()时,newsletter对象上有一些属性是必需的并且显然没有加载。 我可以使用Include()为每个必需属性后跟Where()来解决这个问题: var db = new NewsletterContext(); var newsletter = db.Newsletters.Include(x => x.RequiredProp1) .Include(x => x.RequiredProp2).Include(x => x.RequiredProp3) .Where(x => x.ID==newsletterID) .FirstOrDefault(); db.SaveChanges(); 这不是一个非常优雅的解决方案,如果我向Newsletter对象添加更多必需的属性,它将会中断。 有更好的解决方案吗?

ASP标识表列更改,但新列名称无法进行映射

我已经更改了asp Identity,因此在AspNetIdentity表的数据库Id列中是UserId : modelBuilder.Entity() .Property(p => p.Id) .HasColumnName(“UserId”); 这很好。 生成的表具有UserId而不是Id 。 现在我有另一个表,应该用UserId与AspNetUsers映射: 这样写时: public class JobApply { … public int UserId { get; set; } public virtual ApplicationUser ApplicationUser { get; set; } 数据库中的表格如下: 如果我这样写: public class JobApply { … public int ApplicationUserId { get; set; } public virtual ApplicationUser ApplicationUser { get; set; } […]

entity framework – 有条件地将列添加到group by中

我想有条件地将列添加到GroupBy子句中,但我不确定它是如何完成的。 我有5列,我想根据用户的输入逐个语句添加。 为此,我有以下属性: ProductId ColorId PieceId SizeId WeightId 如果任何属性的值大于0,则此列需要在group by子句中使用。 因此,如果ProductId,ColorId和PieceId的值大于0,则应该在group by中: list.GroupBy(p => new { p.Product.Id, p.ColorId, p.PieceId });

使用Moq进行Web Api 2控制器测试,在Mocked DbContext中加载相关实体

我正在尝试对使用Entity Framework 6的一些Web Api 2控制器进行unit testing,但是在添加实体后加载相关实体时遇到问题。 我正在使用Moq创建一个模拟的DbContext和DbSet,并添加了 public virtual void MarkAsModified(T item) where T : class { Entry(item).State = EntityState.Modified; } 绕过_db.Entry(foo).State = EntityState.Modified; 关于Put动作的问题。 在这个简化的例子中,Api Action是一个post,我们需要找回2个相关实体(Bar和Qux)。 [ResponseType(typeof (Foo))] public async Task PostFoo(Foo foo) { if (!ModelState.IsValid) { return BadRequest(ModelState); } //Do other stuff _db.Foos.Add(foo); _db.Entry(foo).Reference(x => x.Bar).Load(); _db.Entry(foo).Reference(x => x.Qux).Load(); await _db.SaveChangesAsync(); return CreatedAtRoute(“DefaultApi”, […]

entity framework/ C#:多个包含来自字符串数组?

如果想在某些Entity Framework选择上使用Include()方法(以避免’Object as was dispos’exception)。 但Include只接受一个字符串作为参数,这意味着只包含一个字符串。 要做多个包含,你必须链包括.Include(“something”).Include(“something”).Include(“something”) 但我希望我的包含来自字符串数组。 所以我想写的是等效的.Include(array[0]).Include(array[1]).Include(array[2])…Include(array[n]) (其中’n’= array.Length – 1) 当然我事先并不知道字符串数组中会有什么。 但到目前为止我找不到正确的语法。 谢谢您的帮助 编辑:鉴于我到目前为止所提出的建议,我要说请准确地说明类型并避免空值问题并进行测试。 到目前为止,似乎没有任何解决方案可行,我迷失在这个或那个类型中我能做什么,不能做什么。

使用GetValue进行IQueryable 动态排序/过滤失败

我正在尝试使用Entity Framework CTP5从数据库中过滤结果。 这是我目前的方法。 IQueryable Forms = DataContext.CreateFormContext().Forms; foreach(string header in Headers) { Forms = Forms.Where(f => f.GetType() .GetProperty(header) .GetValue(f, null) .ToString() .IndexOf(filter, StringComparison.InvariantCultureIgnoreCase) >= 0); } 但是,我发现GetValue不能使用Entity Framework。 它的类型是IEnumerable但不是IQueryable 有没有我可以用来产生相同效果的替代方案?

LINQ to Entities无法识别方法’System.TimeSpan Subtract(System.DateTime)

以下引发错误: public FieldViewer GetFieldViewByFieldIDIPAndUserByDate( int fieldID, string ip, string userID, DateTime date ) { return this.context.FieldViewers.Where( x => x.Field.FieldID == fieldID && x.Viewer.IPAddress == ip && x.Viewer.User.Id == userID && date.Subtract( x.Viewer.CreatedAt ).TotalMinutes >= 10 ).FirstOrDefault(); } LINQ to Entities无法识别方法’System.TimeSpan Subtract(System.DateTime)’方法,并且此方法无法转换为商店表达式。 我如何解决这个问题,因为我需要减去每个查询。

LINQ to Entity查询可以使用SQL级别函数吗?

我希望我可以编写调用其他函数的LINQ to Entity查询: from c in context.Widgets where MyFunc(c.name) select c 这会导致错误,因为表达式显然无法转换为调用MyFunc的TSQL。 嗯,我在想,除非MyFunc是用户定义的函数或(我认为更好)SQL / CLR函数。 这是可能的,而且是推荐的吗? 如果不可能,我希望这个function有效并且可能会被ADO.NET的未来解决吗?

使用Lambda删除重复项

我需要一些帮助,使用lambda表达式删除我的Entity Framework上下文中的重复条目。 我有一个包含以下列的表: Id, DateOfIncident, Description, EmployeeId, IncidentTypeId, and IsAttendanceIncident 我想删除DateOfIncident, EmployeeID, IncidentTypeID and IsAttendanceIncident are the same.重复条目DateOfIncident, EmployeeID, IncidentTypeID and IsAttendanceIncident are the same. 我确实希望保留一个条目。 我知道如何在SQL中使用带有CTE的存储过程来完成此操作,但我无法弄清楚如何使用Lambda表达式完成此任务。 此代码返回一个不包括我的重复项的列表,但现在我该如何删除不在此列表中的重复项? var query = db.Incidents.Where(x => x.IsAttendanceIncident == “Y”).GroupBy(x => new { x.EmployeeId, x.DateOfIncident, x.IsAttendanceIncident }) .Select(x => x.FirstOrDefault()); 更新: 所以我继续编写自定义IEqualityComparer。 现在,如何使用id删除不在我的distinctItems中的上下文中的事件? static void Main(string[] args) { DALIncidents.AttendanceEntities1 […]