我有一個簡單的電話目錄應用程序使用流利NHibernate的1.1。在應用程序中,「Person」對象具有許多「PhoneNumber」對象。我試圖刪除一個人,我想級聯刪除PhoneNumbers。在閱讀this answer後,我設置了一個DefaultCascade.All()
的約定。但是,試圖刪除父對象仍然會拋出一個異常 - 看起來NHibernate試圖更新子表將父ID設置爲null,而不是刪除記錄:流利NHibernate級聯刪除不工作
{「無法刪除收藏:[Person.PhoneNumbers#473] [SQL:UPDATE PHONE_NUMBERS SET爲person_id = NULL WHERE爲person_id = @ P0] 「}
的InnerException:
{」 不能將NULL值插入列' person_id',表'directory.dbo.phone_numbers';列不是al低空值。更新失敗\ r \ n此語句已終止「}
我流利的配置是:。
public static ISessionFactory CreateSessionFactory() {
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(ConfigurationManager.ConnectionStrings[ConfigurationManager.AppSettings["activeConnStr"]].ConnectionString))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Person>()
.Conventions.Add(DefaultCascade.All())
)
.BuildSessionFactory();
}
的父類是:
public class Person {
public Person() {
PhoneNumbers = new List<PhoneNumber>();
EmailAddresses = new List<string>();
}
public virtual int Id { get; private set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual string Company { get; set; }
public virtual IList<PhoneNumber> PhoneNumbers { get; set; }
public virtual IList<string> EmailAddresses { get; set; }
}
的子類(******中國)是:
我的代碼刪除一個人是:
public static void DeletePerson(int id) {
using (var session = Dalc.Instance.SessionFactory.OpenSession()) {
using (var trans = session.BeginTransaction()) {
session.Delete(session.Load<Person>(id));
trans.Commit();
}
}
}
我在做什麼錯?
這個伎倆。謝謝! – 2010-10-26 15:28:21
反解釋:http://bchavez.bitarmory.com/archive/2007/10/06/nhibernate-and-inversetruefalse-attribute.aspx – 2012-11-23 14:26:47
感謝您的鏈接來解釋'Invserse'。我希望父母擁有孩子,但這不是這種情況。 – Jess 2015-02-13 17:47:17