2009-09-20 65 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