2

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

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

无论如何,你们可以想到完成我们在这里努力实现的目标吗?谢谢!

4

1 回答 1

8

使用泛型。

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
于 2012-06-06T14:40:50.797 回答