【发布时间】:2009-06-26 21:26:55
【问题描述】:
我认为,我在 Fluent NHibernate 映射方面遇到了问题,并且无法完全理解我应该如何设置映射以避免问题。
我有一个业务对象(字面意思是“业务”)和一个评论对象。每个企业都可以在 UI 的一个页面上创建多个评论。该业务是评论的财产,如下所示:
public class Business
{
public virtual int BusinessId {get;set;}
public virtual DateTime LastModified {get;set;}
public virtual IList<Review> Reviews {get;set;}
[... more removed for brevity ...]
}
public class Review
{
public virtual int ReviewId {get;set;}
public virtual string ReviewText {get;set;}
public virtual Business Business {get;set;}
[... more removed for brevity ...]
}
我的映射如下:
public class ReviewMap : ClassMap<Review>
{
public ReviewMap()
{
WithTable("Reviews");
Id(x => x.ReviewId).TheColumnNameIs("ReviewId").GeneratedBy.Identity();
References(x => x.Business).TheColumnNameIs("BusinessId");
Map(x => x.ReviewText);
[... and so on...]
}
public class BusinessMap : ClassMap<Business>
{
public BusinessMap()
{
WithTable("Businesses");
Id(x => x.BusinessId).TheColumnNameIs("BusinessId").GeneratedBy.Identity();
Map(x => x.Name).TheColumnNameIs("BusinessName");
Map(x => x.LastModified, "LastModifiedOn");
HasMany<Review>(x => x.Reviews)
.Inverse()
.LazyLoad();
[... more removed for brevity ...]
}
}
仓库代码是
public void Save(T entity)
{
using (ISession session = GetSession())
using (ITransaction tx = session.BeginTransaction())
{
session.SaveOrUpdate(entity);
tx.Commit();
}
}
在代码中,我将属性分配给 Review 对象,并调用 Repository 的 Save 方法。
问题在于,由于我没有更新业务本身,我不希望它被保存——我想要的只是保存评论。但是代码也试图保存业务,我得到一个例外,因为我没有设置“LastModified”属性——我也不想,因为我保存的是审查,而不是业务。
我应该如何设置映射以让这种情况发生?
【问题讨论】:
标签: c# fluent-nhibernate mapping