c# – EF vs Nhibernate合并断开的对象图
几周前我刚刚开始了一个新项目,并决定尝试使用EF Code First,
之前我使用过NHIbernate,我喜欢从MS中获得ORM的想法,到目前为止它一直很棒 – 直到我开始制作复杂的物体. 我的项目层次如下: 以下是我遇到的最基本的EF Code First设计: 客户端知道城市列表,并返回一个包含现有城市的新地址 但是使用大型复杂数据库设计来处理这个问题听起来很糟糕 我的问题 – 我的第二个问题 – 非常感谢 :) 更新:该问题的简化代码. public class Address { public int ID { get; set; } public virtual City City { get; set; } } public class City { public int ID { get; set; } public string Name { get; set; } public virtual Zone Zone { get; set; } } public class MyContext : DbContext { public MyContext() : base("TransportService") { } public virtual DbSet<City> Cities { get; set; } public virtual DbSet<Address> Addresses { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Address>() .HasRequired(x => x.City) .WithMany().WillCascadeOnDelete(true); } } 添加新地址: public void Add(AddressDto address) { using (var context = new MyContext()) { context.Addresses.Add(address.FromDto<Address>()); context.SaveChanges(); } } “FromDto”是通用的Mapper扩展,它使用所有信息创建新地址,包括City(和City.ID属性) 这将导致创建一个新城市,而不是使用对旧城市的引用. 解决方法
我发现EF没有自动合并,它们的合并功能到目前为止只是手动合并,只有当Context对象在内存中具有对象的所有依赖关系时才会起作用.
处理多级断开连接的对象,并处理手动重新连接它们是很多工作,并且可能导致非常奇怪和难以处理错误(就像问题中所述的那样,因为它没有合并所以创建了新城市,所以它只是创建了一个新的,即使它有一个ID) 所以现在 – Nhibernate赢得这场战斗,Nhibernate具有自动合并功能,如果断开连接的对象有ID,它会尝试合并它,并且成功(根据我的经验)与EF相比,它可以更多地设置运行,但值得一试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |