【问题标题】:Inheritance in .Net EntityFramework 4.0 for similar database tables.Net EntityFramework 4.0 中类似数据库表的继承
【发布时间】:2013-01-21 17:11:24
【问题描述】:

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

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

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

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

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

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

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

提前致谢。

【问题讨论】:

  • 这实际上是一个实体框架问题吗?我从未听说过实体管理器。幸运的是,特定的 ORM 技术不会影响您的问题的答案。
  • 你说得对,我说的是EntityFramework
  • 那么我的回答解决了你的问题吗?因为得到批准的答案肯定会受到赞赏!谢谢!
  • 虽然内容丰富,并且是一个非常好的答案,但问题不在于如何编写接口并实现它,正如您所说的那样,下次您在实体框架中更新数据库时,这将被覆盖。我所要求的只是一种向映射指示他们需要从特定基类中获取信息的方法,或者指示这些表不需要更新。

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


【解决方案1】:

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

如果您确实有那些将从抽象中受益的类的客户,请改为使用接口,但无法控制 DB 的设计会降低其价值,因为 DB 设计人员可以更改表,从而使您的 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; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多