2011-07-05 38 views
2

我在我的SQL Server数据库中3个表:态关联和拆分表

  • 教师
  • 学生
  • 家长

这些表中的每一个包含一些列其中也有发现例如:

其他所有列是不同的。这是一个遗留数据库。我无法改变它。

在我的C#代码,我想有:

public partial class Person 
{ 
    public string FirstName { get; set; } 
    public string Surname { get; set; } 

    public virtual ICollection<Role> Roles { get; set; } 
} 

public interface Role 
{ 
} 

public partial class Teacher : Role 
{ 
    public string School { get; set; } 
} 

public partial class Student : Role 
{ 
    public string YearLevel { get; set; } 
} 

public partial class Parent : Role 
{ 
    public string Blagh { get; set; } 
} 

也就是说,角色和人之间的多态性许多-to-one关联。

我想要这个的原因是因为一个人既可以是老师,也可以是父母。

我的问题是,我应该使用什么技术来从数据库中填充业务对象?

我看了实体框架4.1 DbContext的东西;我喜欢数据注释方法,但它可以做我想要的吗?如果没有,那么Fluent API可以吗?

如果实体框架无法做到这一点,那么NHibernate(最好是使用属性)或Linq-to-SQL呢?

我知道NHibernate可以处理一个多态关联,但是这可以在我们在实体之间拆分表之间完成的吗?

回答

2

你可以用实体框架得到最接近的是TPC inheritance

public abstract class Person 
{ 
    public string FirstName { get; set; } 
    public string Surname { get; set; } 
} 

public partial class Teacher : Person 
{ 
    public string School { get; set; } 
} 

public partial class Student : Person 
{ 
    public string YearLevel { get; set; } 
} 

public partial class Parent : Person 
{ 
    public string Blagh { get; set; } 
} 

没有什么更多的是因为:

  • EF不能没有继承或表拆分
  • 多个实体同一个表映射
  • EF无法将多个关系映射到单个导航属性
  • 教师和家长永远是两个不同的不相关的人。

我怀疑NHibernate是否支持这个,因为你展示的不是纯多态关联(Person的非确定映射仍然存在问题),但也许有人会让我感到惊讶。