Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 首先在MVC EntityFrameWork代码模型中定义2个外键_Asp.net Mvc_Entity Framework_Ef Code First - Fatal编程技术网

Asp.net mvc 首先在MVC EntityFrameWork代码模型中定义2个外键

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<

我有一个带有共享表和成员表的电话簿共享表必须有2个FK到成员表一个作为所有者,另一个作为联合成员,但我无法对其进行真实建模:

这是我的数据库模型:

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 );