2015-11-01 68 views
1

例如,我們有簡介和組織。兩者都有文章。使用實體框架映射多對象

public class Article 
    { 
     public int Id { get; set; } 
     public string Title { get; set; } 
    } 

    public class Profile 
    { 
     public int Id { get; set; } 
     public string Email { get; set; } 
     public virtual ICollection<Article> Articles { get; set; } 
    } 

    public class Organisation 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public virtual ICollection<Article> Articles { get; set; } 
    } 

這樣文章應該有兩種父,因此它應該有類似父類型,以便能夠當您直接選擇文章,訪問父。

public class Article 
    { 
     public int Id { get; set; } 
     public string Title { get; set; } 
     public int ParentId { get; set; } 
     public ArticleParentType Parent { get; set; } 
    } 
  1. 是否有可能使用實體框架映射呢?
  2. 這是一個好主意嗎?
  3. 存儲這類數據的最佳做法是什麼?

回答

1
public class Article 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public int ParentId { get; set; } 
    public ArticleParentType Parent { get; set; } 
} 
  1. 是否有可能使用實體框架映射呢?
  2. 這是一個好主意嗎?

可能是的,但不是一個好主意。底層數據庫不能使用Parentid的外鍵。這會很慢。

  1. 存儲這類數據的最佳做法是什麼?

一個簡單的方法,用2對可空父母和無CascadeOnDelete:

public class Article 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 

    public virtual Profile Profile { get; set; } 
    public virtual Organisation Organisation { get; set; } 
} 

另外,您可以使用第二條繼承,即class OrganisationArticle : Article {}

+0

例如,我決定用「的簡單方法,與2可空父母「..但還有很多其他問題。例如,有一個帖子 - >評論結構。評論有兩個創建者 - 用戶和組織。當我從數據庫選擇帖子時,是否應該向每個創建者添加.Include()?如果您有10位家長,該怎麼辦? – Alex

+0

如何重構類模型? – Alex