7

我有一个参考表,其中包含性别、地址类型、联系人类型等的各种受控值查找数据。许多表对此参考表有多个外键

我还有一个多对多关联表,它们有两个外键指向同一个表。不幸的是,当这些表被拉入 Linq 模型并生成 DBML 时,SQLMetal 不会查看外键列的名称或约束的名称,而只会查看目标表。因此,我最终得到了名为 Reference1、Reference2 的成员……对维护不太友好。例子:

  <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 的名称替换成员名称(因为我遵守这些类型的键的命名约定)。有没有人找到更好的解决这个问题的方法?

4

4 回答 4

3

所以我走上了部分课程的路线。例如,我添加了以下成员来处理原始示例中的第一个引用成员:

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

这远非完美。它在大型模型中需要大量额外的代码,并且取决于属性的顺序不发生变化(如果将引用表的另一个外键添加到帐户表中,则该成员实际上可能指向其他东西而不是运输偏好)。也有好处。由于我已经为其他目的编写部分类,因此添加这些成员不需要我重新构建应用程序。

于 2009-09-21T14:00:04.927 回答
3

在 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

这是我从哪里得到的。

于 2010-08-18T12:03:46.157 回答
2

当前用于 LINQ 的 ms 工具有些有限,看起来与 2010 相比不会付出太多努力。您可以编写自己的代码生成器,查看Damien 的 t4 模板PLINQO。我还发现了可能值得一看的EDMDesigner 。

于 2009-09-20T16:21:35.277 回答
0

我来自 sqlmetal 的 xml 有更合理的默认值。不完美,但更好。第一个 FK 获得了表名,但第二个 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.
  ...
于 2010-06-02T12:49:25.830 回答