.net 在LINQ到SQL中建模多个对象关联

.net 在LINQ到SQL中建模多个对象关联,.net,linq-to-sql,.net,Linq To Sql,我只是想把这个问题抛出去,对我的ORM设计做一个合理性检查,以确保我的设计方式不是疯狂的反模式。我的情况是,在我的设计中,有一个类与其他4个类有关联关系。因此,如果我有类A、B、C、D和E,那么类B、C、D和E都与类A有“Has A”关系。目前我知道的在LINQ to Sql中定义关系的唯一方法是,为每个与之有关系的实体在A中创建一个外键列。虽然这样做有效,但它的缺点是数据库中有四列,其中三列始终为空。这只是ORM工具的一个限制吗?任何建议都将不胜感激。所以我忘记了这种类型的关联的确切名称,但我

我只是想把这个问题抛出去,对我的ORM设计做一个合理性检查,以确保我的设计方式不是疯狂的反模式。我的情况是,在我的设计中,有一个类与其他4个类有关联关系。因此,如果我有类A、B、C、D和E,那么类B、C、D和E都与类A有“Has A”关系。目前我知道的在LINQ to Sql中定义关系的唯一方法是,为每个与之有关系的实体在A中创建一个外键列。虽然这样做有效,但它的缺点是数据库中有四列,其中三列始终为空。这只是ORM工具的一个限制吗?任何建议都将不胜感激。

所以我忘记了这种类型的关联的确切名称,但我相信它被称为多态关联。据我所知,LINQ实体不象Ruby on Rails那样支持多态关联,但您需要做的是:

  • 创建表A、B、C、D、E,而不定义它们之间的关系
  • 为每个表分配一个UniqueIdentifier列(这是一个GUID)
  • 创建一个“Relationships”表(可能想要一个更好的名称)
  • relationships表有两列,类似于Source和Destination,它们都是GUID或UniqueIdentifier类型(我忘了MSSQL服务器怎么称呼它)
  • 糟糕的是MSSQL不能强制执行外键关系(这就是为什么LINQ实体不支持它),所以这必须在业务逻辑或StoredProcess中完成


    这确实为您提供了添加类型F的选项,并使用相同的表来表示F和a之间的Has-a关系。

    感谢Corinth的提示。知道我要做的事情的名称会有所帮助!我可能会在下一个项目中使用NHibernate。