2015-11-01 64 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