C# 将现有实体指定给多对多不会更新一侧
我正在尝试测试以下内容:C# 将现有实体指定给多对多不会更新一侧,c#,nhibernate,fluent-nhibernate,many-to-many,C#,Nhibernate,Fluent Nhibernate,Many To Many,我正在尝试测试以下内容: // Arrange var alpha = new Alpha { Name = "Hello" }; var beta = new Beta { Name = "World" }; using (var t = this.Session.BeginTransaction()) { this.Session.Save(alpha); this.Session.Save(beta); t.Commit(); } // Act using (v
// Arrange
var alpha = new Alpha { Name = "Hello" };
var beta = new Beta { Name = "World" };
using (var t = this.Session.BeginTransaction())
{
this.Session.Save(alpha);
this.Session.Save(beta);
t.Commit();
}
// Act
using (var t = this.Session.BeginTransaction())
{
var a = this.Session.Get<Alpha>(1);
var b = this.Session.Load<Beta>(1);
a.Betas.Add(b);
t.Commit();
}
// Assert
//// this succeeds
Assert.AreEqual(1, this.Session.Get<Alpha>(1).Betas.Count, "Alpha contains beta");
//// this fails
Assert.AreEqual(1, this.Session.Get<Beta>(1).Alphas.Count, "Beta contains alpha"); fails here
Assert.AreEqual(1, this.Session.Query<Beta>().Count(), "Only one beta");
及
我不确定为什么多对多关系的Beta端没有更新。有人能给我解释一下吗?我是NH的新手,所以我可能遗漏了一些明显的东西。这里的重点是,第二个关系不是用C设置的。我们可以看到:
a.Betas.Add(b)代码>。这些对象仍在会话中。因此,测试是在内存中仍然保留的对象上进行的
在断言之前调用session.Clear()
,将加载最新数据。。。从两侧正确分配
注意:还要注意多对多上的这些级联设置。它们不会影响配对表。。。它们确实会影响另一端Ah执行
session.Clear()
works!就实现工作单元模式而言,在Commit
ing更改之后是否应该始终调用clear?我会说:是的。这正是我们必须做的。一次写入操作。。。清洁的其他供阅读!确切地享受NHiberante;)
public AlphaMap()
{
this.Id(a => a.Id);
this.Map(a => a.Name);
this.HasManyToMany(a => a.Betas)
.Cascade.All()
.Table("AlphaBetas")
.ParentKeyColumn("AlphaId")
.ChildKeyColumn("BetaId");
}
public BetaMap()
{
this.Id(a => a.Id);
this.Id(a => a.Name);
this.HasManyToMany(a => a.Alphas)
.Cascade.All()
.Inverse()
.Table("AlphaBetas")
.ParentKeyColumn("BetaId")
.ChildKeyColumn("AlphaId");
}