【发布时间】:2011-12-19 20:27:02
【问题描述】:
我有一个观点,我将只读取(不写入)。此视图没有任何唯一键(不是事件组合)。
那么我怎样才能在 NHibernate 中映射这个视图而不接触视图呢?我不想在视图中添加新列来为我生成唯一标识。有没有办法映射这个视图并在 NHibernate 端生成标识列?
我可以在我的实体类中生成一个 GUID,例如:
public class MyViewClass
{
private Guid _id = new Guid();
public virtual Guid Id { get { return _id; } set { _id = value; } }
}
但是我怎样才能使映射工作呢?以下代码不起作用:
public class MyViewClass: ClassMapping<MyViewClass>
{
public MyViewClass()
{
Mutable(false);
Id(x => x.Id, m => m.Generator(Generators.Guid));
}
}
它希望在视图中显示 Id 列并抛出:
System.Data.SqlClient.SqlException: Invalid column name 'Id'.
顺便说一句,我正在使用 NHibernate 3.2 并通过代码进行映射。
【问题讨论】:
-
我想你可以创建一个复合键,然后在覆盖
GetHashCode和Equals时,只提供基本实现? -
我会咬紧牙关,将
newid() as Id作为附加列添加到我的视图中。 -
@seldon:复合键出了什么?数据库列?数据库列中没有真正的复合键可以用作唯一键。此外,我不能只使用我在 MyViewClass 中为复合键定义的属性 Id,因为它仍在数据库中查找此列(不存在)。那么您能否详细说明一下您的解决方案? tnx:>
-
@Rippo:我尽量不咬紧牙关:D 很痛 ;)
-
@kaptan - 如果视图没有复合键,那么您将返回重复数据。这些数据有什么用?听起来好像观点有缺陷。
标签: nhibernate orm view nhibernate-mapping conform