Nhibernate 在代码中建模多对多关系
使用C#4.0 从我的问题开始,我感到困惑,这可能是因为我的课堂设计是错误的 市场模拟金融市场。经纪人为能够与许多市场互动的金融经纪人建模。一个市场可以与许多经纪人互动。请参见下面的Nhibernate 在代码中建模多对多关系,nhibernate,c#-4.0,many-to-many,Nhibernate,C# 4.0,Many To Many,使用C#4.0 从我的问题开始,我感到困惑,这可能是因为我的课堂设计是错误的 市场模拟金融市场。经纪人为能够与许多市场互动的金融经纪人建模。一个市场可以与许多经纪人互动。请参见下面的经纪人和市场类 public class Market { public int Id { get; set; } public string Symbol { get; set; } public string Description { get; set; } } public clas
经纪人
和市场
类
public class Market
{
public int Id { get; set; }
public string Symbol { get; set; }
public string Description { get; set; }
}
public class Broker
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsDefault { get; set; }
public bool IsActive { get; set; }
public IList<Account> Accounts { get; set; }
}
公共类市场
{
公共int Id{get;set;}
公共字符串符号{get;set;}
公共字符串说明{get;set;}
}
公共类经纪人
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共布尔值是默认值{get;set;}
公共bool IsActive{get;set;}
公共IList帐户{get;set;}
}
在多对多关系中,我有一个额外的属性,称为MinIncrement
,它是Market
和Broker
组合所特有的
最好的建模方法是什么?我是否需要创建第三个类,或者是否可以将MinIncrement
放入现有类中?我应该创建第三个类并从现有类继承吗?我真的不确定如何以面向对象的方式对此进行建模
在我的数据库里很简单。我有三张桌子:
- 经纪人(主键:brokerId)
- 市场(主键:市场化)
- brokerMarkets(主键:brokerId,marketId),这里有一个小增加栏
是的,我将创建第三个实体:
public class BrokerMarketRelationship
{
public int Id { get; set; }
public Broker Broker { get; set; }
public Market Market { get; set; }
public int MinIncrement { get; set; }
}
是的,我将创建第三个实体:
public class BrokerMarketRelationship
{
public int Id { get; set; }
public Broker Broker { get; set; }
public Market Market { get; set; }
public int MinIncrement { get; set; }
}
感谢您的回复,您能否解释一下为什么您选择了该解决方案,而不是其他解决方案,如继承或市场对象中的经纪人列表和经纪人对象中的市场列表?您可以像您所说的那样建立多对多关系,双方都有一个集合,但您无法轻松满足MinIncrement属性的需求。我不确定您使用“继承”有什么想法。如果最小增量确实是经纪人和市场之间关系的一个属性,那么您应该将该关系赋予它自己的实体。反正我就是这样做的。在NHibernate中,多对多实际上有点烦人。通过赋予关系自己的实体,您可以将多对多关系分解为两个一对多关系,而我个人认为这会使生活更轻松。在我的示例中,我意识到您失去了使用主键在DB中唯一强制执行经纪人/市场组合的能力。如果要分离,可以添加单独的唯一约束,或者可以尝试实现复合键,而不是使用关系实体上的代理项ID列。前者可能会对性能产生影响,但也可能是好的,这取决于您的场景。后者在NHibernate中是可能的,但就我个人而言,我发现与之合作存在问题。根据具体情况,我可能会放弃在数据库级别强制唯一性。感谢您的回复,您能否解释为什么您选择该解决方案而不是其他解决方案,例如继承或市场对象中的经纪人列表以及经纪人对象中的市场列表?您可以像您所说的那样建立多对多关系,两边都有一个集合,但你无法轻松满足MinIncrement酒店的需求。我不确定您使用“继承”有什么想法。如果最小增量确实是经纪人和市场之间关系的一个属性,那么您应该将该关系赋予它自己的实体。反正我就是这样做的。在NHibernate中,多对多实际上有点烦人。通过赋予关系自己的实体,您可以将多对多关系分解为两个一对多关系,而我个人认为这会使生活更轻松。在我的示例中,我意识到您失去了使用主键在DB中唯一强制执行经纪人/市场组合的能力。如果要分离,可以添加单独的唯一约束,或者可以尝试实现复合键,而不是使用关系实体上的代理项ID列。前者可能会对性能产生影响,但也可能是好的,这取决于您的场景。后者在NHibernate中是可能的,但就我个人而言,我发现与之合作存在问题。根据具体情况,我可能会放弃在数据库级别强制实现唯一性。