Nhibernate nHib 3.2通过复合密钥上的代码连接进行映射
我的(遗留,无法更改)架构在用户和用户地址之间具有一对一的关系,具有一个复合键:Nhibernate nHib 3.2通过复合密钥上的代码连接进行映射,nhibernate,nhibernate-mapping,mapping-by-code,Nhibernate,Nhibernate Mapping,Mapping By Code,我的(遗留,无法更改)架构在用户和用户地址之间具有一对一的关系,具有一个复合键: Users: - username (PK) - email (PK) - firsname - lastname UsersAddresses: - username (PK, FK) - email (PK, FK) - city - street 我最初的想法是使用尝试列而不是列——它需要任意数量的列映射lambda来允许映射跨越多个列的对象,如您的键: Join("UsersAddresses", j
Users:
- username (PK)
- email (PK)
- firsname
- lastname
UsersAddresses:
- username (PK, FK)
- email (PK, FK)
- city
- street
我最初的想法是使用
尝试列
而不是列
——它需要任意数量的列映射lambda来允许映射跨越多个列的对象,如您的键:
Join("UsersAddresses", j =>
{
j.Table("UsersAddresses");
j.Fetch(FetchKind.Join);
j.Optional(false);
j.Key(k =>
{
k.Columns(c =>
{
c.Name("username");
c.ForeignKey("username_fk");
}, c =>
{
c.Name("email");
c.ForeignKey("email_fk");
});
});
});
c
属于类型IColumnMapper
,它不定义ForeignKey
函数。还有其他想法吗?嗯,你是对的。因此,似乎没有办法为复合键定义外键名称。但是你为什么要在意呢,你说过你的数据库是遗留的,不能更改,而且在模式导出的情况下只需要设置外键名就可以了,而你不需要这样做。哦,因此,在我对代码映射的理解中,基本上缺少了一点:如何告诉NHib在usersaddress
中引用了Users
中的哪一列?(即username->username\u fk
等)我认为顺序很重要。如果在用户
中将用户名和电子邮件属性定义为复合键,则在键的列
方法中,列定义的顺序应该相同。
Join("UsersAddresses", j=>
{
j.Table("UsersAddresses");
j.Fetch(FetchKind.Join);
j.Optional(false);
j.Key(k=>
{
//What here???
k.Column(c=>
{
c.Name("");
c.Name("");
});
k.ForeignKey("");
k.ForeignKey("");
});
});
Join("UsersAddresses", j =>
{
j.Table("UsersAddresses");
j.Fetch(FetchKind.Join);
j.Optional(false);
j.Key(k =>
{
k.Columns(c =>
{
c.Name("username");
c.ForeignKey("username_fk");
}, c =>
{
c.Name("email");
c.ForeignKey("email_fk");
});
});
});