Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nhibernate 在代码中建模多对多关系_Nhibernate_C# 4.0_Many To Many - Fatal编程技术网

Nhibernate 在代码中建模多对多关系

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

使用C#4.0

从我的问题开始,我感到困惑,这可能是因为我的课堂设计是错误的

市场模拟金融市场。经纪人为能够与许多市场互动的金融经纪人建模。一个市场可以与许多经纪人互动。请参见下面的
经纪人
市场

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中是可能的,但就我个人而言,我发现与之合作存在问题。根据具体情况,我可能会放弃在数据库级别强制实现唯一性。