首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Fluent nHibernate多对多映射

Fluent nHibernate多对多映射
EN

Stack Overflow用户
提问于 2014-04-22 23:48:15
回答 2查看 1.7K关注 0票数 1

我正在尝试创建实体与两个FK从表Group和Person。

代码语言:javascript
运行
复制
public class Person
{
    public virtual int p_id { get; set; }
    public virtual string name { get; set; }
    public virtual IList<Person> ppl { get; set; }
}

public class Group
{
    public virtual int g_id { get; set; }
    public virtual string name{ get; set;}
    public virtual IList<Group> groups { get; set; }
}

多对多映射:

代码语言:javascript
运行
复制
HasManyToMany(x => x.ppl)
    .Table("gp")
    .ParentKeyColumn("g_id")
    .ChildKeyColumn("p_id");

HasManyToMany(x => x.groups)
     .Table("gp")
     .ParentKeyColumn("p_id")
     .ChildKeyColumn("g_id")
     .Inverse();

问题是表gp中的两个约束都引用了表person。Show create table命令:

代码语言:javascript
运行
复制
CREATE TABLE `gp` (
`g_id` int(11) NOT NULL,
`p_id` int(11) NOT NULL,
KEY `p_id` (`p_id`),
KEY `g_id` (`g_id`),
CONSTRAINT `FK4B9E89089BCCDC65` FOREIGN KEY (`g_id`) REFERENCES `person` (`p_id`),
CONSTRAINT `FK4B9E8908E34BCD9E` FOREIGN KEY (`p_id`) REFERENCES `person` (`p_id`)

想要:

代码语言:javascript
运行
复制
CREATE TABLE `gp` (
`g_id` int(11) NOT NULL,
`p_id` int(11) NOT NULL,
KEY `p_id` (`p_id`),
KEY `g_id` (`g_id`),
CONSTRAINT `FK4B9E89089BCCDC65` FOREIGN KEY (`g_id`) REFERENCES `group` (`g_id`),
CONSTRAINT `FK4B9E8908E34BCD9E` FOREIGN KEY (`p_id`) REFERENCES `person` (`p_id`)

我试图删除组映射中的逆向(),并在person表中使用它,但我得到了以下异常:“关系在两端都指定了逆向”。有人知道为什么约束引用一个表吗?

EN

回答 2

Stack Overflow用户

发布于 2014-04-23 01:16:49

我有这个:

我没有“”。

  1. 你有(单数)

.ParentKeyColumn("p_id") .ChildKeyColumn("g_id")

我在收藏中添加了一些东西,也许可以尝试一下。

代码语言:javascript
运行
复制
    .ParentKeyColumns.Add("p_id")
    .ChildKeyColumns.Add("g_id")

            (and vice versa)

以下是我的2个映射(在我的世界中未更改,其中员工有ParkingArea,反之亦然)............

代码语言:javascript
运行
复制
        /* the below is how to do it without a surogatekey on the link table */
        HasManyToMany<ParkingAreaNHEntity>(x => x.MyParkingAreas)
       .Table("EmployeeToParkingAreaLink")
            .ParentKeyColumns.Add("AbcEmployeeUUID", p => p.UniqueKey("Emp_ParkingArea_Unique").Index("IX_ABC123"))
            .ChildKeyColumns.Add("AbcParkingAreaUUID", p => p.UniqueKey("Emp_ParkingArea_Unique"))
            .Cascade.None()
            ;




        /* the below is how to do it without a surogatekey on the link table */
        HasManyToMany<EmployeeNHEntity>(x => x.MyEmployees)
       .Table("EmployeeToParkingAreaLink")
            .ParentKeyColumns.Add("AbcParkingAreaUUID", p => p.UniqueKey("Emp_ParkingArea_Unique").Index("IX_ABC123"))
            .ChildKeyColumns.Add("AbcEmployeeUUID", p => p.UniqueKey("Emp_ParkingArea_Unique"))
            .Cascade.None()
            ;
票数 1
EN

Stack Overflow用户

发布于 2014-04-23 05:17:47

找到解决方案:

代码语言:javascript
运行
复制
HasManyToMany(x => x.ppl)
.Table("gp")
.ChildKeyColumns.Add("p_id");

HasManyToMany(x => x.groups)
 .Table("gp")
 .ChildKeyColumns.Add("g_id")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23224260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档