Asp.net mvc 首先在MVC EntityFrameWork代码模型中定义2个外键
我有一个带有共享表和成员表的电话簿共享表必须有2个FK到成员表一个作为所有者,另一个作为联合成员,但我无法对其进行真实建模: 这是我的数据库模型:Asp.net mvc 首先在MVC EntityFrameWork代码模型中定义2个外键,asp.net-mvc,entity-framework,ef-code-first,Asp.net Mvc,Entity Framework,Ef Code First,我有一个带有共享表和成员表的电话簿共享表必须有2个FK到成员表一个作为所有者,另一个作为联合成员,但我无法对其进行真实建模: 这是我的数据库模型: public class PhoneBookDB : DbContext { public DbSet<Member> Members { get; set; } public DbSet<ContactKind> ContactKinds { get; set; } public DbSet<
public class PhoneBookDB : DbContext {
public DbSet<Member> Members { get; set; }
public DbSet<ContactKind> ContactKinds { get; set; }
public DbSet<Contact> Contacts { get; set; }
public DbSet<NumberKind> NumberKinds { get; set; }
public DbSet<Number> Numbers { get; set; }
public DbSet<AddressKind> AddressKinds { get; set; }
public DbSet<Address> Addresses { get; set; }
public DbSet<City> Cities { get; set; }
public DbSet<Group> Groups { get; set; }
public DbSet<ShareAccess> ShareAccesses { get; set; }
public DbSet<Share> Shares { get; set; }
}
这就是会员的模式:
public class Member {
public long Id { get; set; }
public string UserName { get; set; }
public virtual ICollection<Group> Groups { get; set; }
public virtual ICollection<Share> OwnerShares { get; set; }
public virtual ICollection<Share> JointShares { get; set; }
public virtual ICollection<NumberKind> NumberKinds { get; set; }
public virtual ICollection<AddressKind> AddressKinds { get; set; }
}
或者这个:
db.Shares.Single(sh => sh.Id == item.Id).JointMember
但它们都返回Null
我尝试了更多版本的模型,比如:成员中的一个ICollection或共享模型中的一个成员prop,但没有一个能给出真正的DB表和答案。
另外,我需要至少一个成员模型中的共享集合,以便按成员检索共享元素,正如您所知,我是通过EFCodeFirst编码的,我需要一种解决此问题的方法,谢谢您,您需要在DbContext的
创建
事件中定义关系,如下所示
modelBuilder.Entity<Share>().
HasRequired(s=>s.Owner ).WithMany(p=>p.OwnerShares).WillCascadeOnDelete(false);
modelBuilder.Entity<Share>().HasRequired(s=>s.JointMember )
.WithMany(p=>p.JointShares );
modelBuilder.Entity()。
HasRequired(s=>s.Owner)。带有多个(p=>p.OwnerShares)。将级联删除(false);
modelBuilder.Entity().HasRequired(s=>s.JointMember)
.有许多(p=>p.联合共享);
我认为同样,您可能还需要定义其他关系(ShareAccess、Group)。这是一个很好的入门教程,
db.Shares.Single(sh => sh.Id == item.Id).JointMember
modelBuilder.Entity<Share>().
HasRequired(s=>s.Owner ).WithMany(p=>p.OwnerShares).WillCascadeOnDelete(false);
modelBuilder.Entity<Share>().HasRequired(s=>s.JointMember )
.WithMany(p=>p.JointShares );