EF代码首先映射映射

编程入门 行业动态 更新时间:2024-10-28 18:22:41
本文介绍了EF代码首先映射映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 我第一次使用EF 4.1 RC代码。我有一个很多关系的工作与复合PK在交接表的朋友。我们明确需要一个单独的Friends类(不要问)代表我们的连接表。我们的目标是能够从用户实体控制删除过程。请阅读其余内容: http:// mocella .blogspot / 2010/01 /实体框架-V4-对象graph.html 。所以,我们设法创建了我们的组合PK,但这破坏了我们的集合映射。问题是如何映射FriendsCol?

public class User { public int UserId {get;组; } public string Name {get;组; } public virtual ICollecion< Friends> FriendsCol {get;组; } } public class Friends { public int User1Id {get;组; } public int User2Id {get;组; } public User User1 {get;组; } public User User2 {get;组; }

有复合键映射

public class FriendsMap:EntityTypeConfiguration< Friends> { HasKey(m => new {m.userId1,m.userId2}); //this.HasRequired(x => x.User1) //。WithMany() //.HasForeignKey(x => x.User1Id) //.WillCascadeOnDelete(false); //this.HasRequired(x => x.User2) // .WithMany() // .HasForeignKey(x => x.User2Id) // .WillCascadeOnDelete(false); } public class UserMap:EntityTypeConfiguration< UserNew> { public UserMap() { ToTable(users); 属性(user => user.Name).HasColumnName(name); // HasMany< Friends>(user => user.FriendsCol).WithMany(); } }

解决方案

这是删除相关实体的另一个失败。这是错误:*来自'Order_Lines'AssociationSet的关系处于已删除状态。给定多重约束,相应的Order_Lines_Target也必须在已删除状态。*

class Program { static void Main(string [] args) { int orderid1; int Lineid2; using(var context = new Context()) { var u1 = new Order(){Name =A}; var l1 = new OrderLine(){Name =L1}; var l2 = new OrderLine(){Name =L2}; u1.Lines.Add(l1); u1.Lines.Add(l2); context.Orders.Add(u1); context.SaveChanges(); Orderid1 = u1.Id; Lineid2 = l2.Id; } using(var context = new Context()) { var u1 = context.Orders.Find(Orderid1); foreach(在u1.Lines中的var项目) { if(item.Id == Lineid2) { u1.Lines.Remove(item); break; } } context.SaveChanges(); } } } public class OrderLine { public int Id {get;组; } public string Name {get;组; } public Order Order {get;组; } public class Order { public int Id {get;组; } public string Name {get;组; } public virtual ICollection< OrderLine>线{get;组; } public Order() { Lines = new List< OrderLine>(); } } public class上下文:DbContext { public DbSet< Order>订单{get;组; } public DbSet< OrderLine> OrderLiness {get;组; protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity< Order>()。HasMany< OrderLine>(o => o.Lines).WithRequired (l = l.Order); } }

I'm using EF 4.1 RC Code first. I have a many to many relation working with a composite PK in the junction table Friends. We explicitly need a separate Friends class (don't ask) which represents our junction table. Our goal is to be able to control the delete process from the User entity. Please read this before reading the rest: mocella.blogspot/2010/01/entity-framework-v4-object-graph.html. So, we managed to create our composite PK but this broke our mapping for the collection. The question is how to map FriendsCol?

public class User { public int UserId { get; set; } public string Name { get; set; } public virtual ICollecion<Friends> FriendsCol { get; set; } } public class Friends { public int User1Id { get; set; } public int User2Id { get; set; } public User User1 { get; set; } public User User2 { get; set; } }

Have a composite key mapping

public class FriendsMap : EntityTypeConfiguration<Friends> { HasKey(m => new { m.userId1 , m.userId2 }); //this.HasRequired(x => x.User1) //.WithMany() //.HasForeignKey(x => x.User1Id) //.WillCascadeOnDelete(false); //this.HasRequired(x => x.User2) // .WithMany() // .HasForeignKey(x => x.User2Id) // .WillCascadeOnDelete(false); } public class UserMap : EntityTypeConfiguration<UserNew> { public UserMap() { ToTable("users"); Property(user => user.Name).HasColumnName("name"); // HasMany<Friends>(user => user.FriendsCol).WithMany(); } }

解决方案

Here is another fail to delete related entities. And this is the error: *A relationship from the 'Order_Lines' AssociationSet is in the 'Deleted' state. Given multiplicity constraints, a corresponding 'Order_Lines_Target' must also in the 'Deleted' state.*

class Program { static void Main(string[] args) { int orderid1; int Lineid2; using (var context = new Context()) { var u1 = new Order() { Name = "A" }; var l1 = new OrderLine() { Name = "L1" }; var l2 = new OrderLine() { Name = "L2" }; u1.Lines.Add(l1); u1.Lines.Add(l2); context.Orders.Add(u1); context.SaveChanges(); Orderid1 = u1.Id; Lineid2 = l2.Id; } using (var context = new Context()) { var u1 = context.Orders.Find(Orderid1); foreach (var item in u1.Lines) { if (item.Id == Lineid2) { u1.Lines.Remove(item); break; } } context.SaveChanges(); } } } public class OrderLine { public int Id { get; set; } public string Name { get; set; } public Order Order { get; set; } } public class Order { public int Id { get; set; } public string Name { get; set; } public virtual ICollection<OrderLine> Lines { get; set; } public Order() { Lines = new List<OrderLine>(); } } public class Context : DbContext { public DbSet<Order> Orders { get; set; } public DbSet<OrderLine> OrderLiness { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Order>().HasMany<OrderLine>(o => o.Lines).WithRequired(l => l.Order); } }

更多推荐

EF代码首先映射映射

本文发布于:2023-11-07 04:03:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1565526.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:代码   EF

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!