背景
我正在开发一个采用插件架构设计的系统,允许多个数据存储(SQL Server,Firebird,MySQL)。
这个插件架构相当复杂,似乎是尝试从头开始编写ADO.NET。随着时间的推移,插件'已删除使用SQL Server以外的数据库的功能。我正在考虑将此项目的数据访问部分从遗留框架转换为Entity Framework 5.0 DbContext。 我尝试不修改数据库以避免现有客户的数据转换。
我有使用Fluent NHibernate的经验,并且我试图找出使用EF DbContext的Fluent API来解决我当前项目目标的最佳方法。我知道Fluent API通常用于Code-First开发,但出于维护原因,我想在这种情况下使用它。
问题
我有很多包含ParentTable
和ParentId
列的表格。 ParentTable是short
,ParentId是int
(不确定是否重要)。
我有一个抽象的基础对象,当前只有Id
的Int32属性。
我想要做的是定义要映射到ParentTable
属性的枚举,并让这些父对象基于ParentTable
枚举鉴别器返回基础对象的实例。在EF DbContext中执行此操作的最佳方法是什么?如果我需要某种名为GetParent
的扩展方法或存储库方法,我可以这样做,但我希望尽可能通过EF的映射自动完成。<\ n / p>
这是一个例子(不,我还没有创建表关联的枚举):
public class Person : BaseObject, IHasParentProperties
{
// ... removed other properties
public short ParentTable { get; internal set; }
public int ParentId { get; internal set; }
[NotMapped]
public BaseObject Parent { get; set; }
}
假设ParentTable
对象中的Person
是一个短片,其映射到TableMapping.Client
的未来枚举值且ParentId
为333
,是否可以根据表鉴别器和 id配置映射以将Parent
加载为Client
对象?总是只有一个父级,但父级可以是十个不同对象中的任何一个。
在流利的NHibernate中,如果我没记错的话,我已经完成了同样的任务,其中包括一些参考识别器的变体(取自here):
ReferencesAny(x => x.Author)
.EntityTypeColumn("Type")
.EntityIdentifierColumn("Id")
.IdentityType<int>();
已经有一段时间了,但我记得这段经历与我目前使用EF的经历不相上下。
我喜欢将数据库规范化并从头开始重写大部分数据库,但我试图让所有内容尽可能简单。
感谢。