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");
}