2011-11-14 46 views
0

我有一個帶有共享表和成員表的電話簿共享表必須有2個FK作爲所有者,另一個作爲聯合成員,但我可以不是模型,可以真正做到:在MVC模型中定義2個外鍵EntityFrameWork代碼優先

這是我的DB型號:

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 Share { 

    public long Id { get; set; } 
    public Group Group { get; set; } 
    public ShareAccess ShareAccess { get; set; } 
    public Member Owner { get; set; } 
    public Member JointMember { 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; } 
} 

這種設計的車型我有4 FK股價表成員表在DB的,也是我不能訪問會員型號

像這樣分享的元素:

db.Members.Single(m => m.Shares.Any(sh => sh.Id == item.Id)) 

或這一個:

db.Shares.Single(sh => sh.Id == item.Id).JointMember 

但他們都返回空。

我嘗試更多版本的模型,例如:一個ICollection在成員或一個成員在共享模型中的道具,但沒有一個給我一個真正的數據庫表和答案。 我也需要共享的ATLEAST一個集會員型號爲會員取回股份元素,你也知道我的EFCodeFirst編碼,我需要一種方法來解決這個問題,謝謝

回答

1

您需要○定義他relaionships在OnModelCreating你的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); 

我想你可能會需要(ShareAccess,集團)也定義了其他關係一樣。這裏有一個很好的教程, http://blogs.msdn.com/b/adonet/archive/2010/12/06/ef-feature-ctp5-fluent-api-samples.aspx

相關問題