将没有 Id 的数据库视图映射到 NHibernate 中的 class 模型
Mapping db view without Id to class model in NHibernate
在我的应用程序中,我使用 NHibernate ORM 和 Automapper 将实体映射到 class 模型。作为:
fluent-nhibernate/wiki/Auto-mapping
对于表它的工作。
问题是当尝试映射没有 Id 字段的数据库视图时,例如:
public class VTest
{
[NotNull]
public virtual AAATab AAA { get; set; }
[NotNull]
public virtual BBBTab BBB { get; set; }
}
我创建复合键:
public void Override(AutoMapping<VTest> mapping)
{
mapping.IgnoreProperty(x => x.Id);
mapping.CompositeId()
.KeyProperty(x => x.AAA.Id)
.KeyProperty(x => x.BBB.Id);
}
但它不起作用。获取错误,因为在数据库查询中有 select id :
[GenericADOException: could not execute query [ SELECT this_.Id as
Id7_0_, this_.AAAId as AAAId7_0_, this_.BBBId as
BBB_7_0_ FROM [VTest] this_ ]
这种情况下可以使用自动映射器吗?
我找到了解决办法。在 compositeKey 中必须在数据库视图中使用物理存在 属性,所以我创建了新属性:
public virtual int AAAId {get;set;}
public virtual int BBBId {get;set;}
然后我创建:
mapping.IgnoreProperty(x => x.Id);
mapping.CompositeId()
.KeyProperty(x => x.AAAId)
.KeyProperty(x => x.BBBId);
这个视图自动映射或 table 没有 Id 有效。 (要对 dbview 或 table 建模,您需要添加覆盖函数 Equals() 和 GetHashCode() )
在我的应用程序中,我使用 NHibernate ORM 和 Automapper 将实体映射到 class 模型。作为: fluent-nhibernate/wiki/Auto-mapping
对于表它的工作。
问题是当尝试映射没有 Id 字段的数据库视图时,例如:
public class VTest
{
[NotNull]
public virtual AAATab AAA { get; set; }
[NotNull]
public virtual BBBTab BBB { get; set; }
}
我创建复合键:
public void Override(AutoMapping<VTest> mapping)
{
mapping.IgnoreProperty(x => x.Id);
mapping.CompositeId()
.KeyProperty(x => x.AAA.Id)
.KeyProperty(x => x.BBB.Id);
}
但它不起作用。获取错误,因为在数据库查询中有 select id :
[GenericADOException: could not execute query [ SELECT this_.Id as Id7_0_, this_.AAAId as AAAId7_0_, this_.BBBId as BBB_7_0_ FROM [VTest] this_ ]
这种情况下可以使用自动映射器吗?
我找到了解决办法。在 compositeKey 中必须在数据库视图中使用物理存在 属性,所以我创建了新属性:
public virtual int AAAId {get;set;}
public virtual int BBBId {get;set;}
然后我创建:
mapping.IgnoreProperty(x => x.Id);
mapping.CompositeId()
.KeyProperty(x => x.AAAId)
.KeyProperty(x => x.BBBId);
这个视图自动映射或 table 没有 Id 有效。 (要对 dbview 或 table 建模,您需要添加覆盖函数 Equals() 和 GetHashCode() )