【发布时间】:2012-02-20 16:19:49
【问题描述】:
我想在我的聚合根中添加一个新实体。这可以正常工作,但不会强制生成 Id。
为了更清楚,请看下面的示例代码,其中所有实体都使用Id(e => e.Uid).GeneratedBy.GuidComb(); 映射。
public class Aggregate : EntityBase<Guid,Aggregate>
{
// ...
public virtual ISet<SubEntity> SubEntities { get; protected set; }
public virtual SubEntity DoSomethingThatCreatesASubEntity(string name, string format)
{
var newEntity=new SubEntity(name, format);
SubEntities.Add(newEntity);
return newEntity;
}
}
public class SubEntity : EntityBase<Guid,SubEntity>
{
}
// Client Code:
var agr=Session.Get<Aggregate>(id);
var subEntity=agr.DoSomethingThatCreatesASubEntity("xyz","xyz");
Assert.True(subEntity.IsTransient);
Session.Flush();
Assert.False(subEntity.IsTransient);
我想要的是,当我添加到子实体时,newEntity 将使用 Uid 重新加载。 我不想在那里访问 NHibernate ISession(所以 Session.Save() 或 Refresh())是遥不可及的。
在不修改我的实体的情况下这可能吗?
【问题讨论】:
标签: c# nhibernate fluent-nhibernate domain-driven-design