多个外键相同的表(Multiple foreign keys to the same table)

2019-08-08 05:29发布

我有各种各样的性别,地址类型,接触式等控制值查找数据的参考表许多表有多个外键参照下表

我也有很多到许多有两个外键同一个表关联表。 不幸的是,当这些表被拉到一个LINQ模型,并生成DBML,SQLMetal不看外键列,或限制的名字的名字,但只有在目标表中。 所以我结束了委员呼吁定1,给定2,...不是很维护方便。 例:

  <Association Name="tb_reference_tb_account" Member="tb_reference" <======
  ThisKey="shipping_preference_type_id" OtherKey="id" Type="tb_reference"
  IsForeignKey="true" />
  <Association Name="tb_reference_tb_account1" Member="tb_reference1" <======
  ThisKey="status_type_id" OtherKey="id" Type="tb_reference" 
  IsForeignKey="true" />

我可以进入DBML和手动更改成员名称,当然,不过这将意味着我不能再来回我的数据库架构。 这是不是在模型中,这仍然是不断发展的当前阶段的选项。 分割的参照表为n个单独的表也是不希望的。

我大概可以写每一代后对XML运行,并用从ThisKey派生出来的成员名称的脚本(因为我坚​​持命名约定这些类型的密钥)。 有没有人找到了一个更好的解决这个问题?

Answer 1:

于是,我走下部分类路线。 举例来说,我添加了以下成员来解决第一基准构件在我原来的例子:

public partial class tb_account
{
    public tb_reference shipping_preference_reference
    {
        get
        {
            return this._tb_reference.Entity;
        }
        set
        {
            this.tb_reference = value;
        }
    }

这是远远不够完善。 它需要额外的代码在较大的模型大量,并且依赖属性的顺序不会改变(如果另一个外键引用表添加到该帐户表上,该成员可能实际上指向比别的东西航运偏好)。 有积极的一面,太。 既然我已经写作其他用途部分类,添加这些成员并没有要求我重新构建应用程序。



Answer 2:

在VS2010实际上,你可以重命名视图中的父母和孩子的属性。 这是一个有点隐蔽,但。

  1. 在dbml的观众选择你烦恼的关系。
  2. 在属性网格,你将有两排子和父属性。
  3. 展开他们那里你可以改变属性的名称

更多详细信息可以在这里找到: http://weblogs.asp.net/scottgu/archive/2007/05/29/linq-to-sql-part-2-defining-our-data-model-classes.aspx

这是我从得到它。



Answer 3:

对LINQ当前的MS工具是一些什么样的限制,它并没有真正看起来不起眼的努力将是未来的VS 2010,您可以编写自己的代码生成器,看达明的T4模板或PLINQO 。 我还发现EDMDesigner这可能是值得一试。



Answer 4:

从sqlmetal我的XML有更合理的默认值。 并不完美,但更好。 第一FK拿到表名,但第二次拿到了字段名。

  <Association Name="FK_Product_DefaultOutputTypeID" Member="OutputType"
   ThisKey="DefaultOutputTypeID" OtherKey="OutputTypeID" Type="OutputType"
   IsForeignKey="true" />
  <Association Name="FK_Product_DefaultTileOutputTypeID" Member="DefaultTileOutputType"
   ThisKey="DefaultTileOutputTypeID" OtherKey="OutputTypeID" Type="OutputType"
   IsForeignKey="true" />

sqlmetal版本:

  C:\Program Files\Microsoft Visual Studio 9.0\VC>sqlmetal /?
  Microsoft (R) Database Mapping Generator 2008 version 1.00.21022
  for Microsoft (R) .NET Framework version 3.5
  Copyright (C) Microsoft Corporation. All rights reserved.
  ...


文章来源: Multiple foreign keys to the same table