CSharp - 将现有实体分配给多个实体并不更新其中一方

  显示原文与译文双语对照的内容

我正在尝试测试以下内容:


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

我的映射是


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

我不确定为什么Many-to-Many关系的Beta端没有被更新。 有人可以向我解释我是一个新手所以我可能漏掉了一些明显的东西。

时间: 作者:

这里的一点是,C# 中没有设置第二个关系。 我们可以看到:a.Betas.Add(b); 。 这些对象仍在会话中。 所以测试在内存中仍然保留着对象。

在断言之前调用 session.Clear(),并且将加载最新的数据。 从boths侧面正确分配。

注意:在上也要小心这些层叠设置。 它们不会影响配对表。 它们会影响另一端。

作者:
...