mo.*_*mo. 5 nhibernate fluent-nhibernate
我的情况类似于Fluent NHibernate Mapping中描述的情况,而不是PK Field
但是,我的表之间的关系由多个非主键列描述.想象一下克里斯·米克的情况,但是Person有一个JobType和一个Code一起应该(对不起,它是一个遗留数据库)唯一描述一个Person
Person
------
Id PK
JobType
Code
Name
Order
-----
Id PK
Person_JobType
Person_Code
OrderDetails
Run Code Online (Sandbox Code Playgroud)
SerhatÖzgel的回答描述了使用PropertyRef,但我无法找到一种方法来单独为多列做到这一点.我尝试过类似的
class PersonMap : ClassMap<Person>
{
public PersonMap()
{
HasMany(p => p.Order)
.KeyColumns.Add("Person_JobType")
.PropertyRef("JobType")
.KeyColumns.Add("Person_Code")
.PropertyRef("Code")
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这显然是行不通的,因为KeyColumns.Add()返回另一个OneToManyPart所以PropertyRef()添加未对个人柱.第二个PropertyRef()只是覆盖第一个,我得到以下错误:
NHibernate.MappingException : collection foreign key mapping
has wrong number of columns: MyApp.Person.Order type: Int32
Run Code Online (Sandbox Code Playgroud)
我查看了KeyColumns.Add()的各种重载,
public TParent Add(string name)
public TParent Add(params string[] names)
public TParent Add(string columnName, Action<ColumnPart> customColumnMapping)
public TParent Add(ColumnMapping column)
Run Code Online (Sandbox Code Playgroud)
特别是最后两个,但找不到任何方法PropertyRef为每列设置单独的级别:(有没有办法做到这一点?我完全是错误的方式吗?
使用 hbm.xml 和 FluentNHibernate 可以通过一个技巧
class PersonMap : ClassMap<Person>
{
public PersonMap()
{
Map(_ => JobTypeAndCode)
.Columns.Add("Person_JobType", "Person_Code")
.ReadOnly()
.LazyLoad() // optional: prevent loading the Columns twice
.Access.None();
HasMany(p => p.Orders)
.KeyColumns.Add("Person_JobType", "Person_Code")
.PropertyRef("JobTypeAndCode")
}
private object JobTypeAndCode { get; set; } // FakeProperty
}
Run Code Online (Sandbox Code Playgroud)
注意:我从未使用 NHibernate MappingByCode 让它工作
| 归档时间: |
|
| 查看次数: |
2846 次 |
| 最近记录: |