Tag: entity framework 5

当孩子有身份证时,如何使用EF将多个子实体添加到对象?

我们使用EF5和SQL Server 2012以下两个类: public class Question { public Question() { this.Answers = new List(); } public int QuestionId { get; set; } public string Title { get; set; } public virtual ICollection Answers { get; set; } } public class Answer { public int AnswerId { get; set; } public string Text { get; set; […]

如何在entity framework代码中首先映射不同数据类型的列和实体

我正在使用Entity Framework 5 – Code。 我有一个数据库,我连接到已经存在一段时间了(我没有创建它)。 有一个名为T_Customers的表。 它包含所有客户的列表。 它具有以下结构(仅部分显示): Customer_id | numeric (5, 0) | auto increment | not null (not set as primary key) FName | varchar(50) | not null LName | varchar(50) | not null 我的Customer类: public class Customer : IEntity { public int Id { get; set; } public string FirstName { […]

实体数据模型向导太慢(SQL数据库)

使用:visual studio 2012 Ultimate,ADO Entity Framework 6,数据库:Sql express 2014(安装在本地PC上),数据库表计数:174表。 我正在尝试使用实体数据模型向导创建数据库模型,但创建模型大约需要8个小时(对话框没有响应)。 我试图重新安装visual studio和Entity Framework但同样的问题。 我需要任何可以加速数据库模型创建的想法。

AddOrUpdate工作不符合预期,并产生重复

我正在使用基于Code-First DBContext的EF5设置。 在DbMigrationsConfiguration.Seed我试图用默认的虚拟数据填充DB。 要完成此任务,我使用DbSet.AddOrUpdate方法。 最简单的代码来说明我的目标: j = 0; var cities = new[] { “Berlin”, “Vienna”, “London”, “Bristol”, “Rome”, “Stockholm”, “Oslo”, “Helsinki”, “Amsterdam”, “Dublin” }; var cityObjects = new City[cities.Length]; foreach (string c in cities) { int id = r.NextDouble() > 0.5 ? 0 : 1; var city = new City { Id = j, Name […]

entity framework迁移不包括DefaultValue数据注释(EF5RC)

我有一个看起来像这样的课程: [Table(“Subscribers”, Schema = “gligoran”)] public class Subscriber { [Key] public string Email { get; set; } [Required] [DefaultValue(true)] public bool Enabled { get; set; } } 创建迁移以包含此类时,我得到: public partial class AddSubscriberClass : DbMigration { public override void Up() { CreateTable( “gligoran.Subscribers”, c => new { Email = c.String(nullable: false, maxLength: 128), Enabled = c.Boolean(nullable: […]

属性无法防止过度发布

阻止MVC 4过度发布的最佳方法是什么? 根据MS消息来源,[Bind]属性应该是通过阻止传入的表单值进入数据库来防止过度发布的最简单方法。 使用最新版本的MVC和EF,这似乎没有像预期/广告一样工作,除非我遗漏了一些重要的东西。 从Wrox Professional ASP.NET MVC 4 (Jon Galloway的第7章)开始,以下类应该防止过度发布: [Bind(Exclude=”IsAdmin”)] public class User { public int ID { get; set; } public string FirstName { get; set; } public bool IsAdmin { get; set; } } 但是所有[Bind]属性都会阻止表单提交值绑定到模型。 然后,模型具有空白/默认值,并将其写回数据库。 在这种情况下,它会确保IsAdmin = false每次使用此模型调用.SaveChanges()。 任何“真实”值都会被覆盖。 这是一个巨大的安全失败。 替代语法 – 将[Bind]放在Edit controller action参数中 – 完全相同: public ActionResult Edit([Bind(Exclude […]

EntityFramework 5过滤包含的导航属性

我想找到一种方法使用Linq将导航属性过滤到相关实体的子集。 我知道围绕这个主题的所有答案建议做一个匿名选择器,如: query.Where(x => x.Users.Any(y => y.ID == actingUser.ID)) .Select(x => new { Event = x, Discussions = x.Discussions.Where(actingUser.GenerateSecurityFilterFor()) }) .OrderBy(x => x.Discussions.Count()) .ThenBy(x => x.Event.Name); 但是,由于我们的查询生成的一般性质,这显然不太理想,如果你抛出探查器,也会产生非常可怕的SQL查询。 我希望能够完成以下事情: query.Include(x => x.Discussions.Where(actingUser.GenerateSecurityFilterFor())) .OrderBy(x => x.Discussions.Count()) .ThenBy(x => x.Name); 我意识到EF5(或任何版本)都不支持这一点,但必须有一种方法可以通过Linq完成对结果集的约束,而无需深入研究匿名类型的select语句。 我试图做一些事情: query.GroupJoin(discquqery, x => x.ID, x => x.Event.ID, (evt, disc) => evt.Discussions = disc.Where(actingUser.GenerateSecurityFilterFor())).ToList(); 但是,您无法在lambda表达式中进行赋值,并且选择匿名类型会导致使用select时遇到的相同困境。 我想我无法理解为什么EF没有提供一种方法(我能找到)来生成: SELECT […]

entity framework5升级后,多对多关系左右键被翻转

我有一些代码可以在代码中保存多对多的关系。 它与Entity Framework 4.1一起运行良好,但在更新到Entity Framework 5后,它失败了。 我收到以下错误: INSERT语句与FOREIGN KEY约束“FK_WebUserFavouriteEvent_Event”冲突。 冲突发生在数据库“MainEvents”,表“dbo.Event”,列“Id”中。 我正在使用POCO实体和自定义映射。 标准字段和多对一关系映射似乎工作正常。 UPDATE 好的,所以我安装了SQL Profiler并且情节已经变厚…… exec sp_executesql N’insert [dbo].[WebUserFavouriteEvent]([WebUserId], [EventId]) values (@0, @1) ‘,N’@0 int,@1 int’,@0=1820,@1=14 意思是: WebUserId = @0 = 1820 EventId = @1 = 14 有趣的是, EF5似乎已经翻转了外键 …… WebUserId应该是14,而EventId 应该是1820 ,而不是像现在这样。 我查看了映射代码,我99%我已经正确设置了它。 有关详细信息,请参阅Entity Framework Fluent API – 关系MSDN文章 。 注意:我还发现这不仅限于保存,SELECT也被破坏了。 这是所有相关代码: 服务层 public […]

无法删除该对象,因为在entity framework5中的ObjectStateManager中找不到该对象

我正在尝试使用EntityFramework 5删除对象,但我收到此错误。 无法删除该对象,因为在ObjectStateManager中找不到该对象 我正在使用Remove()方法,因为在EF5中不存在DeleteObject() 。 任何人都可以帮助我错过了什么吗? 这对删除不起作用 localDb.Customers.Remove(new Customer() { CustomerId = id }); localDb.SaveChanges(); 我尝试从msdn将状态更改为Deleted的另一件事。 但在这里它给出了一个错误,说所有字段都应该存在。 是否有必要获取完整的记录然后删除? var customer = new Customer(){ CustomerId = id }; localDb.Customers.Attach(customer); localDb.Entry(customer).State = EntityState.Deleted; localDb.SaveChanges(); 有什么输入?

使用entity framework加载所有子实体

我有这样的数据模型 我想将对帐中的所有相关实体加载到Reconciliation对象中。 目前,我可以找到将所有相关的entites加载到单个Recon的唯一方法是多个列表。 但我想在Reconciliation对象中加载每个相关实体。 如果可能的话,优雅的方式。 Reconciliation recon = db.Reconciliations .Where(r => r.ReconNum == 382485).First(); List reconDetails = recon.ReconciliationDetails.ToList(); List jrnlDetails = reconDetails.Select(r => r.JrnlEntryDetail).ToList(); List jrnl = jrnlDetails.Select(j => j.JrnlEntry).ToList(); List invoices = jrnl.SelectMany(j => j.ARInvoices).ToList(); List invoicesDetail = invoices .SelectMany(i => i.ARInvoiceDetails).ToList(); List credmemos = jrnl.SelectMany(j => j.ARCredMemoes).ToList(); List credmemosDetail = credmemos .SelectMany(c => […]