【发布时间】:2015-05-16 16:07:38
【问题描述】:
我有两个简单的实体,分别命名为 Country 和 City。
public class Country : Entity
{
public Country()
{
Cities = new List<City>();
}
public virtual string Name { get; set; }
public virtual IList<City> Cities { get; set; }
}
public class City : Entity
{
public virtual Country Country { get; set; }
public virtual string Name { get; set; }
}
使用的数据库是 SQL Server,并且 City 有一个 Country 的外键,具有级联删除功能。
我正在使用 Fluent NHibernate,这是关系的映射配置:
public CountryMap()
{
Id(x => x.Id, "IdCountry").GeneratedBy.Identity();
Map(x => x.Name).Not.Nullable().Length(50);
HasMany(x => x.Cities).KeyColumn("IdCountry").ForeignKeyConstraintName("FK_Cities_Countries")
.Not.KeyNullable().Cascade.AllDeleteOrphan().ExtraLazyLoad();
Table("Countries");
}
public CityMap()
{
Id(x => x.Id, "IdCity").GeneratedBy.Identity();
Map(x => x.Name).Not.Nullable().Length(50);
References(x => x.Country, "IdCountry").ForeignKey("FK_Cities_Countries")
.Not.Nullable().Not.Insert().Not.Update().Cascade.All().LazyLoad();
Table("Cities");
}
一切正常,但删除国家/地区后,城市仍保留在父集合中,我希望将城市从该集合中删除。 (和 EF 一样)
我发现让它工作的唯一方法是刷新会话(清除、驱逐...)
【问题讨论】:
-
这是不可能的,也不应该是。删除实体不会改变内存中的内容。在这种情况下,您有责任清除收藏。
标签: c# nhibernate fluent-nhibernate