gpt4 book ai didi

.net - 流利的 NHibernate : multiple one-to-many relationships between the same entities

转载 作者:行者123 更新时间:2023-12-02 02:33:38 28 4
gpt4 key购买 nike

我正在开发一个错误跟踪应用程序。有门票,每张门票都有一个开启者用户和一个指定用户。所以,基本上,我有两个实体,它们之间有两个多对一的关系。他们的示意图是这样的:

用户:

public class User
{
public virtual int Id { get; protected set; }
...

public virtual IList<Ticket> OpenedTickets { get; set; }
public virtual IList<Ticket> AssignedTickets { get; set; }
}

门票:

public class Ticket
{
public virtual int Id { get; protected set; }
...

[Required]
public virtual User OpenerUser { get; set; }
public virtual User AssignedUser { get; set; }
}

我使用 FluentNHibernate 的自动映射功能。

问题是,无论我是否设置关系,在用户方面,两个集合始终包含相同的数据。我猜 Fluent 无法分辨哪个关系的哪一端属于哪里。

我四处搜索,但没有发现任何有用的东西。

编辑 2:

在 Steves 的帮助下,我发现我必须实现自己的 IHasManyConvention。我还发现 IHasManyConvention 中生成的列名必须与我的 IReferenceConvention 生成的列名匹配。稍微调整一下,我就让它工作了。

我还震惊地发现,调用方便的 ForeignKey.EndsWith("Id") 方法会把整个事情搞砸。

虽然 Steves 的回答本身并不能解决问题,但我非常感谢他为我指明了正确的方向。

最佳答案

自动映射为其外键列生成相同的名称。您可以通过使用(映射的)属性名称命名外键列的自定义约定来克服此问题:

class HasManyConvention : IHasManyConvention
{
public void Apply(IOneToManyCollectionInstance instance)
{
instance.Key.Column(instance.Member.Name);
}
}

// register convention using:
autoMapping.Conventions.Add(new HasManyConvention());

关于.net - 流利的 NHibernate : multiple one-to-many relationships between the same entities,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2777152/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com