我面临着一个不寻常的行为,存储库和事务 ,它让我发疯。S#arp Architecture Repository.DbContext.CommitTransaction()不寻常的行为
我有两个简单的POCO类Action和Version,如下所示。从Action-> Version中有 一对多的关系。
public class Action : Entity
{
public virtual string Name
{
get;
set;
}
public virtual IList<Version> Versions
{
get;
protected set;
}
public Action()
{
Versions = new List<Version>();
}
public virtual void AddVersion(Version version)
{
version.Action = this;
Versions.Add(version);
}
}
public class Version : Entity
{
public virtual int Number
{
get;
set;
}
public virtual Action Action
{
get;
set;
}
public Version()
{
}
}
现在我有一个代码段如下:
var actionRep = new Repository<Action>();
var versionRep = new Repository<Version>();
var act1 = new Action();
actionRep .SaveOrUpdate(act1);
using (versionRep .DbContext.BeginTransaction())
{
var v1 = new Version();
act1.AddVersion(v1);
//versionRep .SaveOrUpdate(v1);
versionRep .DbContext.CommitTransaction();
}
在上面的代码,我只是在创建动作和版本库。 首先我使用Action Repository持久化一个Action对象。然后我开始使用版本存储库开始 事务,创建新版本,设置 引用与操作,并提交实际调用版本存储库的 事务。
结果有点奇怪。虽然我尚未在版本存储库上调用SaveOrUpdate方法,但版本对象仍然保留,即使是 也是如此。如果 我注释掉act1.AddVersion(v1);在交易中, ,那么版本不会持续。
后一点斗争的我测试使用NHibernate ,而不是直接使用利用相同 流利映射/配置 夏普架构库相同的情况下(AutoPersistenceModelGenerator.Generate())。结果如预期的 。版本对象不会持久。这里是代码
var sessionFactory = CreateSessionFactory();
_act1 = new Action();
using(var session = sessionFactory.OpenSession())
{
session.SaveOrUpdate(_act1);
}
using(var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
_v1 = new Version();
_act1.AddVersion(_v1);
//session.SaveOrUpdate(_act1);
transaction.Commit();
}
}
CreateSessionFactory()方法如下。如果sombody可以请让我知道为什么我有这个 行为没有什么复杂的
private const string _dbFilename = "nhib_auditing.db";
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(SQLiteConfiguration.Standard
.UsingFile(_dbFilename)
.ShowSql())
.Mappings(m => m.AutoMappings.Add(new
AutoPersistenceModelGenerator().Generate()))
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}
现在。它让我发疯。
只是为了让你知道我还没有重写Action和 版本的映射。
等待 纳比尔
tl; dr。你能用更少的话来缩小它的范围吗? – 2010-06-22 22:39:58
对不起,毛里西奥。我实际上发布它在S#arp架构谷歌邮件列表,并且我有点从那里复制。 – nabeelfarid 2010-06-23 10:36:13