c# - .Net EntityFramework 4.0 中类似数据库表的继承

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

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

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

例子: 表用户:列{name,surname,age} 表 OldUser:列(姓名、姓氏、年龄、lastDateSeen} 等等

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

我目前的解决方案是制作此类并使用转换器将持久对象的值传递给它的对象。它可以工作,但不够优雅,我不喜欢它。

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

(为了将来引用,如果我想让类实现一个接口(interface),可以做同样的事情吗?)

提前致谢。

最佳答案

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

如果您确实拥有那些将从抽象中受益的类的客户,而不是使用接口(interface),但无法控制 DB 的设计,这会降低它的值(value),因为 DB 设计者可以更改表,从而使您的 EF 类不再实现接口(interface):

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; }
}

关于c# - .Net EntityFramework 4.0 中类似数据库表的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13932530/

相关文章:

c# - 如何在 ATL COM 模块中打印控制台输出?

c# - 使用 CodeDom 分析代码结构?

c# - Team Foundation Server 是将 .net 网站自动发布到远程服务器的正确解决方案吗?

c# - PropertyDescriptor.IsBrowsable 是否与关联的 Browsable() 属性不一致?

c# - 为多个类型参数添加类型限制?

c# - 在客户端打印而不显示打印对话框

.net - 如何在代码中更改 Crystal 报表连接属性?

java - 实体中的继承,使用objectbox

c++ - 在这种情况下是否有必要进行范围解析?

javascript - 我在 JavaScript 中对这个原型(prototype)做错了,有什么想法吗?