我搜索了很多关于如何使用EntityFramework或NHibernate映射多重继承或多接口植入但是我找不到任何有用的东西。
我只想使用NHibernate来映射这个结构:
public interface IA
{
string A { get; set; }
}
public interface IB
{
string B { get; set; }
}
public class C : IA, IB
{
string A { get; set; }
string B { get; set; }
}
据我所知,将此结构映射到关系数据库意味着只需要将外键与接口主键相关联,因此接口应该具有以下键:
public interface IA
{
Guid AId { get; set; }
string A { get; set; }
}
public interface IB
{
Guid BId { get; set; }
string B { get; set; }
}
public class C : IA, IB
{
public virtual Guid AId { get; set; }
public virtual Guid BId { get; set; }
public virtual string A { get; set; }
public virtual string B { get; set; }
}
但是如何使用NHibernate或EntityFramework映射此结构,我不知道为什么在他们的文档中没有提到多个接口映射!
答案 0 :(得分:1)
在NHibernate中,您只需将C 映射为接口不存在。
由于隐式多态性,您仍然可以在接口上进行查询。
答案 1 :(得分:0)
您将其映射为任何其他类,因为这不是继承映射。此外,您的代码无法编译,因为您必须实现类C
中的所有属性,因此您将获得:
public interface IA
{
Guid AId { get; set; }
string A { get; set; }
}
public interface IB
{
Guid BId { get; set; }
string A { get; set; }
}
public class C : IA, IB
{
public virtual Guid AId { get; set; }
public virtual Guid BId { get; set; }
public virtual string A { get; set; }
}
现在您的代码可以编译,并且您可以像其他任何类一样使用类。您将AId和BId映射为复合键(取决于使用的ORM),您就完成了。这不是继承,因为您只有单个实体而没有基本实体。至少这是它如何与Entity框架一起使用。
答案 2 :(得分:0)
正如我所创建的那样,由于这个概念以及迭代所说的“非接口获取持久化场景”,因此不可能在关系数据库中进行多重继承。