我们的团队正致力于在广泛的现有数据库架构上实现代码优先的EF框架。我们真正希望拥有的一个基础接口是我们所有不同实体都将实现的。我们打算在此基本界面中定义的所有内容都是 Id 字段和名称字段,因为我们所有的数据库表都具有这两个属性的概念。这种方法有很多好处,因为在我们的应用程序中有很多情况,你需要的一个对象是它的Id和一些描述性文本(它的'Name')所以能够编程到接口而不是实现可以提供相当大的灵活性。
问题出现了,因为并非我们架构中的所有表都有基于整数的PK,有些表有字符串,guid等。所以我们无法为除了object之外的接口中的Id字段定义真正的'type'可以容纳所有可能性。然后问题就是EF不喜欢将对象作为其PK的想法,因此在尝试指定HasKey(o => o.Id)时会抱怨。
无论如何,你们有没有想过要完成我们想要在这里完成的工作?谢谢!
答案 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