我认为我只会阅读(没有写入)。此视图没有任何唯一键(不是事件合成)。
那么如何在不触及视图的情况下在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'.
BTW,我正在使用NHibernate 3.2并通过代码进行映射。
答案 0 :(得分:1)
更新:要在LINQ中使用它,所有列都为CompositeId
,而Mutable(false)则使用默认实现覆盖Equals和GetHashCode。
public class MyViewClass
{
public override bool Equals(object obj)
{
return base.Equals(obj);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
原始答案:
如果你不想插入/更新它,我根本不会映射它public class MyViewClass
{
public virtual string Prop1 { get; set; }
public virtual int Prop2 { get; set; }
}
var viewObjects = session.CreateSQLQuery("SELECT col1 as Prop1, col2 as Prop2 FROM MyView")
.SetResultTransformer(Transformers.AliasToBean<MyViewClass>())
.List<MyViewClass>();