具有基本实体类的实体框架

时间:2012-06-06 14:30:49

标签: c# entity-framework

我们的团队正致力于在广泛的现有数据库架构上实现代码优先的EF框架。我们真正希望拥有的一个基础接口是我们所有不同实体都将实现的。我们打算在此基本界面中定义的所有内容都是 Id 字段和名称字段,因为我们所有的数据库表都具有这两个属性的概念。这种方法有很多好处,因为在我们的应用程序中有很多情况,你需要的一个对象是它的Id和一些描述性文本(它的'Name')所以能够编程到接口而不是实现可以提供相当大的灵活性。

问题出现了,因为并非我们架构中的所有表都有基于整数的PK,有些表有字符串,guid等。所以我们无法为除了object之外的接口中的Id字段定义真正的'type'可以容纳所有可能性。然后问题就是EF不喜欢将对象作为其PK的想法,因此在尝试指定HasKey(o => o.Id)时会抱怨。

无论如何,你们有没有想过要完成我们想要在这里完成的工作?谢谢!

1 个答案:

答案 0 :(得分:7)

使用泛型。

public interface IEntityBase<TKey>
{
    TKey Id { get; set; }
    string Name { get; set; }
}

然后你可以像这样实现它

public class IntKeyEntity : IEntityBase<int>
{
    int Id { get; set; }
    string Name { get; set; }
}

public class StringKeyEntity : IEntityBase<string>
{
    string Id { get; set; }
    string Name { get; set; }
}

//etc