[英]Fluent NHibernate - HasMany on composite key
How do you create a HasMany relation on a legacy database which has no Foreign Key and columns differently named? 如何在没有外键和列名不同的旧数据库上创建HasMany关系? I know how to create a one-to-one relation on HeaderVersion using References, but don't know how to create HasMany from Header 1 to * HeaderVersion. 我知道如何使用References在HeaderVersion上创建一对一关系,但不知道如何从Header 1创建HasMany到* HeaderVersion。 Join condition should be: 加入条件应该是:
Header.Id1 = HeaderVersion.PId1 AND Header.Id2 = HeaderVersion.PId2
Domain: 域:
public class Header {
public virtual int Id1 { get; set; }
public virtual int Id2 { get; set; }
public virtual string Something { get; set; }
}
public class HeaderVersion {
public virtual int PId1 { get; set; }
public virtual int PId2 { get; set; }
public virtual int Version { get; set; }
public virtual string SomethingFoo { get; set; }
}
Map: 地图:
public HeaderMap() {
Table("Header");
LazyLoad();
CompositeId().KeyProperty(x => x.Id1, "Id1")
.KeyProperty(x => x.Id2, "Id2");
Map(x => x.Something).Column("Something");
}
public HeaderVersionMap() {
Table("HeaderVersion");
LazyLoad();
CompositeId().KeyProperty(x => x.PId1, "PId1")
.KeyProperty(x => x.PId2, "PId2")
.KeyProperty(x => x.Version, "Version");
Map(x => x.SomethingFoo).Column("SomethingFoo");
}
Assuming Header
is (omitted overrides for GetHashCode
and Equals
) 假设Header
是(忽略GetHashCode
和Equals
覆盖)
public class Header
{
public virtual int Id1 { get; set; }
public virtual int Id2 { get; set; }
public virtual string Something { get; set; }
public virtual ICollection<HeaderVersion> Versions { get; set; }
}
HeaderMap
should look like : HeaderMap
应如下所示:
public class HeaderMap : ClassMap<Header>
{
public HeaderMap()
{
Table("Header");
LazyLoad();
CompositeId().KeyProperty(x => x.Id1, "Id1")
.KeyProperty(x => x.Id2, "Id2");
Map(x => x.Something).Column("Something");
HasMany(x => x.Versions).AsBag().KeyColumns.Add("PId1", "PId2");
// Fetch, Inverse, Cascade depend on your mapping strategy
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.