我目前正在處理我的第一個NHibernate項目。NHibernate,通過父母添加孩子vs設置對孩子父母的引用
爲了測試它,我構建了一個實體圖,並且我試圖堅持數據庫。當我通過在IList中插入附加增加孩子的父母沒有在數據庫中工作,因爲我得到的數據庫空列例外(代碼片段)
- 當我設置對孩子的參考?這是工作(雖然這種感覺不自然,我父,見代碼片斷
- 這是正常的行爲,還是我做錯了什麼
片段1:
var country = new Country();
var countryLocale = new CountryLocale { LangCode = "nl-nl", Name = "Nederland" };
country.CountryLocales.Add(countryLocale);
var city = new City();
var cityLocale = new CityLocale { LangCode = "nl-nl", Name = "Amsterdam" };
city.CityLocales.Add(cityLocale);
country.Cities.Add(city);
片段1個錯誤:
Cannot insert the value NULL into column 'CountryId', table 'ArtWorld.dbo.City'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated.
片段2:
var country = new Country();
var countryLocale = new CountryLocale { Country = country,LangCode = "nl-nl",
Name = "Nederland" };
var city = new City{Country = country};
var cityLocale = new CityLocale { City = city, LangCode = "nl-nl",
Name = "Amsterdam" };
session.SaveOrUpdate(country);
市和CityLocale地圖:
public class CityMap : ClassMap<City>
{
public CityMap()
{
Table("City");
Id(x => x.Id);
References(x => x.Country).Column("CountryId").Cascade.SaveUpdate();
HasMany(x => x.CityLocales).KeyColumn("CityId").Cascade.SaveUpdate();
}
}
public class CityLocaleMap : ClassMap<CityLocale>
{
public CityLocaleMap()
{
Table("City_Locale");
Id(x => x.Id);
Map(x => x.LangCode).Not.Nullable();
Map(x => x.Name).Not.Nullable();
References(x => x.City).Column("CityId").Cascade.SaveUpdate();
}
}
這是我的國家/ Countrylocale地圖:
public class CountryMap : ClassMap<Country>
{
public CountryMap()
{
Table("Country");
Id(x => x.Id);
HasMany(x => x.Cities).KeyColumn("CountryId").Cascade.SaveUpdate();
HasMany(x => x.CountryLocales).KeyColumn("CountryId").Cascade.SaveUpdate();
}
}
public class CountryLocaleMap :ClassMap<CountryLocale>
{
public CountryLocaleMap()
{
Table("Country_Locale");
Id(x => x.Id);
Map(x => x.LangCode).Not.Nullable();
Map(x => x.Name).Not.Nullable();
References(x => x.Country).Column("CountryId").Cascade.SaveUpdate();
}
}
謝謝您的廣泛答覆。這對我幫助很大。 – Patrick 2013-04-07 13:58:00