如果你为玩家添加了一个属性,那么你就不需要那些助手方法了。
public class Position : BaseEntity<int, Position>
{
private IList<Player> allPlayers = new List<Player>();
//read only
public IList<Player> Players { get { return allPlayers;} }
//... rest of class omitted
}
然后打电话说:
var position = new Position();
position.Players.Add(new Player());
Q2,Q3你可以在位置上有一个helper方法来简化。
public class Position : BaseEntity<int, Position>
{
public void RemoveAll()
{
// null out the position on players
foreach(var player in allPlayers)
{
player.Position = null; // SETS PositionId FIELD IN PLAYER TABLE TO NULL
}
allPlayers.Clear();
}
// ... rest of class omitted
}
一个电话看起来像:
using(var session = SessionFactory.GetCurrentSession())
{
using(var tx = session.BeginTransaction())
{
position.RemoveAll();
position.Delete();
tx.Commit();
}
}
因为玩家会在位置之外保持,但是位置会被移除,所以你不想使用cascade。Cascade用于删除,而不是更新id。例如,删除订单并层叠其所有行项目。