2011-06-16 54 views
1

我很麻煩;EF代碼首先 - 兩個表,兩個關係

對於最初的想象,我們有一個實體的會員,以及會員有項目..

如果你問:你項目有成員?是的,他們有...

成員(N *)< - >項目(N *) - 這是一個n-n關係。

但在我的領域的應用我想說太一個會員負責N個項目,一個項目有一個會員..

public class Member : User 
{ 
    public virtual ICollection<Project> ProjectsResponsable { get; set; } 
    public virtual ICollection<Project> ProjectsWorker { get; set; } 
} 
public class Project 
{ 
    public virtual int ProjectID { get; set; } 
    public virtual String Name { get; set; } 
    public virtual bool Enabled { get; set; } 
    public virtual DateTime CreatedDate { get; set; } 
    public virtual String Description { get; set; } 

    public virtual Member Responsable { get; set; } 
    public virtual ICollection<Member> Workers { get; set; } 
    public virtual ICollection<Issue> Issues { get; set; } 
} 

對於工人ProjectsWorker屬性將爲會員之間的關係NN項目,但與此(EF框架只爲我創建單向接力)

我的問題是......誰可以映射這兩個關係與代碼第一。 我正在使用DatabaseFirst,現在使用代碼優先,它似乎非常強大,但現在限制了我一點。

+1

你的問題是?你是否希望每個項目只有一個成員,但是讓成員擁有n個項目? – 2011-06-16 03:15:26

回答

1

您必須告訴EF哪些關係屬於一起。你可以做到這一點無論用數據說明......

public class Member : User 
{ 
    [InverseProperty("Responsable")] 
    public virtual ICollection<Project> ProjectsResponsable { get; set; } 
    [InverseProperty("Workers")] 
    public virtual ICollection<Project> ProjectsWorker { get; set; } 
} 

public class Project 
{ 
    public virtual int ProjectID { get; set; } 
    // ... 
    [InverseProperty("ProjectsResponsable")] 
    public virtual Member Responsable { get; set; } 
    [InverseProperty("ProjectsWorker")] 
    public virtual ICollection<Member> Workers { get; set; } 
    // ... 
} 

(我相信InverseProperty屬性僅在關係的一個側面必要的,但我不知道。)

...或流利的API:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Member>() 
     .HasMany(m => m.ProjectsResponsable) 
     .WithOptional(p => p.Responsable) // or WithRequired(...) 
     .WillCascadeOnDelete(false); 

    modelBuilder.Entity<Member>() 
     .HasMany(m => m.ProjectsWorker) 
     .WithMany(p => p.Workers) 
     .Map(a => { 
      a.ToTable("MemberProjects"); 
      a.MapLeftKey("MemberID"); 
      a.MapRightKey("ProjectID"); 
     }); 
} 
+0

謝謝Slauma真的是我需要的東西,謝謝你的時間:) – anotherNeo 2011-06-16 15:05:10

+0

@Slauma我認爲你是合適的人選來幫助我:你可以看到,成員從用戶擴展... ...我還有一個實體:也擴展的客戶端,所以我的模式將有3個表,用戶,成員和客戶端。我需要在項目和客戶端之間再建立一個關係,也就是說,項目有一個客戶端和一個客戶端有N個項目。看看下一條消息,以查看我在FluentAPI – anotherNeo 2011-06-17 17:29:51

+0

modelBuilder.Entity () 中定義的內容。 HasMany(c => c.Projects) .WithRequired(p => p.Client) .WillCascadeOnDelete(false); – anotherNeo 2011-06-17 17:30:16