有复合键映射
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代码首先映射映射
发布评论