对于类似的数据库表,.Net EntityFramework 4.0中的继承

时间:2012-12-18 12:00:58

标签: c# .net inheritance entity-framework-4

我正在寻找以下问题的解决方案:

我有很多表在少数/无列中彼此区分(为什么会出现这种情况,因为我没有设计所述数据库,也无法更改它。)

实施例: 表用户:列{name,surname,age} 表OldUser:列(名称,姓氏,年龄,lastDateSeen) 等

有没有办法在Visual Studio中向EntityFramework 4.0指示扩展由_name,_surname,_age字段及其相应属性组成的基类,以便我可以在代码中将该类用于批处理作业?

我目前的解决方案是创建此类并使用转换器将持久对象的值传递给它的对象。它有效,但它不优雅,我不喜欢它。

我来自java / hibernate环境,这是基本功能。

(如果我希望类实现接口,将来可以做同样的事情吗?)

提前致谢。

1 个答案:

答案 0 :(得分:1)

由于您的RDBMS(至少SQL Server 2008及更早版本)不允许表继承,我建议您不要在C#中的数据库模型中使用继承。当您无法控制表格的设计时,尤其建议这样做。

如果您实际拥有那些将从抽象中受益的类的客户端,而不是能够控制数据库的设计,那么使用接口会降低这一点,因为数据库设计人员可以更改表,从而使您的EF类成为可能不再实现界面:

public interface IUser {
  public string Name { get; }
  // etc...
}

public class User : IUser {
  public string Name { get; set; }
  // etc...
}

public class OldUser : IUser {
  public string Name { get; set; }
  // rest of IUser
  public DateTime? LastSeenOn { get; set; }
}