NHibernate的;仅使用单向映射来保持孩子

时间:2012-07-31 09:58:17

标签: c# .net nhibernate

通过单向映射和Cascade.All集合,是否可以只保存一个孩子,通过设置有效的FK然后执行Save或SaveOrUpdate?

如果我创建新订单,设置有效的Account_ ID并执行SaveOrUpdate,则帐户 _id在数据库中设置为NULL,而实体仍然具有先前设置的Account_id。

为什么呢?我可以修改SaveOrUpdate方法以使其工作吗?

public class Account
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IList<Order> Orders { get; set; }
    //...
}

public class Order
{
   public int Id { get; set; }
   public int Account__id { get; set; }
   public decimal Price { get; set; }
   //...
}

映射:

public  class AccountMap : ClassMap<Account>
{
   public AccountMap()
       : base()
   {
       Id(x => x.Id).GeneratedBy.Identity();
       Map(x => x.Name);
       HasMany(x => x.Orders).KeyColumn("Account__id").Cascade.All(); 
   }
}

存储库:

    public void SaveOrUpdate(T instance)
    {
        using (ISession session = FnhManager.OpenSession())
        {
            using (ITransaction transaction = session.BeginTransaction())
            {
                lock (instance)
                {
                    session.SaveOrUpdate(instance);
                    transaction.Commit();
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

您似乎没有在订单映射类中映射Account__id列。试着把

Map(x => x.Account_id)

到你的OrderMap课程。