![](/img/trans.png)
[英]'NHibernate.Mapping.Property' is not an attribute class
[英]Nhibernate class mapping and cascade property
我們有一個Address
實體,它具有引用City
表的外鍵。 一個Address
僅引用一個City
,但是一個City
應該能夠被多個Address
引用。
public class Address : Entity
{
public virtual string AddressLine1 { get; set; }
public virtual string AddressLine2 { get; set; }
public virtual City City { get; set; }
}
public class City : Entity
{
public virtual string CityName { get; set; }
}
這是Address
類的映射。
public class AddressClassMapping : ClassMapping<Address>
{
public AddressClassMapping()
{
this.Schema("dbo");
this.Table("addresses");
this.Cache(e => e.Usage(CacheUsage.ReadWrite));
this.Id(e => e.Id,
m => { m.Column("id_address"); m.Generator(Generators.Native);});
this.Property(e => e.AddressLine1,
m => { m.Column("address_line_1"); m.NotNullable(true); });
this.Property(e => e.AddressLine2,
m => { .Column("address_line_2");
m.NotNullable(true); });
this.ManyToOne(
e => e.City,
m =>
{
m.Column("id_city");
m.Cascade(Cascade.All);
});
}
}
我應該如何更改類映射,以便:
到目前為止,我一直在玩Cascade
屬性,並且遇到過這樣的問題,其中地址的城市更新導致City表的更新,或者我不能在不違反外鍵約束的情況下刪除地址。
可以將上面顯示的many-to-one
一部分(也將在此處討論NHibernate多對一級聯 )設置為這些值
// xml
cascade="all|none|save-update|delete"
// maping by code
Cascade.All | Cascade.None | Cascade.Persist | Cascade.Remove
// fluent
Cascade.All() | Cascade.SaveUpdate() | Cascade.None() | Cascade.Delete()
(在此處了解更多信息,按代碼映射-ManyToOne )
這將涵蓋點號...以上都不是。 因為沒有任何要求要求從地址到城市的級聯。
要點3:
- 我可以通過更新外鍵來更新地址的城市屬性嗎?
與級聯無關。 這是標准行為,即使沒有級聯也可以工作,因為它會更改“地址”表中的值。 完全不接觸城市。
涵蓋要點2:
- 當我刪除地址時,城市沒有被觸及嗎?
好吧,我們應該完全刪除級聯,因為...在此方向上不需要。 但是,此設置將適合第2點
this.ManyToOne(
e => e.City,
m =>
{
m.Column("id_city");
m.Cascade(Cascade.Persist);
涵蓋第一點:
- 刪除城市時,具有該城市的所有地址都會被刪除嗎?
我們必須做很多事情。 我們需要擴展POCO關系並引入一對多映射。 那將完成所需的工作:
public class City : Entity
{
public virtual IList<Address> Addresses { get; set; }
}
制圖
通過代碼映射:
Set(x => x.Addresses, c =>
{
...
c.Cascade(Cascade.All.Include(Cascade.DeleteOrphans));
流利的版本
HasMany(x => x.Addresses)
...
Cascade.AllDeleteOrphan();
(在此處了解更多信息,按代碼映射-套裝和袋子 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.