2009-09-20 67 views
6

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

我也有多对多关联表,这两个关联表具有两个到同一个表的外键。不幸的是,当这些表被拉入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派生的东西替换成员名称(因为我遵守这些类型的键的命名约定)。 有没有人找到解决这个问题的更好方法?

+0

这似乎是相关的: http://stackoverflow.com/questions/3736003/sqlmetal-multiple-foreign-keys-pointing-to-one-table-issue – DenNukem 2012-04-03 16:14:08

回答

3

所以我去了部分班路线。例如,我添加了以下成员来解决我原始示例中的第一个参考成员:

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

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

2

LINQ的当前ms工具是有限的,它看起来并不像2010年将会付出很多努力。您可以编写自己的代码生成器,查看Damien's t4 templatesPLINQO。我也发现EDMDesigner这可能值得一看。

+0

谢谢你的有趣的链接。我看了两个 - 达米安的模板似乎没有做我需要的。 PLINQO似乎更具可配置性,但需要Codesmith,这不是免费的。我将尝试一种部分类的方法,以某种方式向这些成员公开更多有意义的名称。 – cdonner 2009-09-20 20:24:11

0

我从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. 
    ... 
3

在VS2010实际上,你可以重命名视图中的父母和孩子的属性。虽然有点隐藏。

  1. 在dbml查看器中选择困扰您的关系。
  2. 在属性网格中,您将有两行Child和Parent Property。
  3. 展开他们那里,您可以更改属性

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

这是我从得到它。

+0

还没有找到,以获得更改从数据库的另一个往返更新生存:( – 2010-08-18 13:35:25