2009-06-15 57 views
0

之間的引用我有兩個表:實體和動態數據網站:表

CREATE TABLE [dbo].[Context] (
    [Identity] int IDENTITY (1, 1) NOT NULL, 
    [Naam] nvarchar (255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [Code] nvarchar (10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [Omschrijving] ntext COLLATE SQL_Latin1_General_CP1_CI_AS NULL) ; 
ALTER TABLE [dbo].[Context] 
    ADD CONSTRAINT [PK_Context] 
     PRIMARY KEY ([Identity]) ; 
ALTER TABLE [dbo].[Context] 
    ADD CONSTRAINT [IX_Context_Naam] 
     UNIQUE ([Naam]) ; 
ALTER TABLE [dbo].[Context] 
    ADD CONSTRAINT [IX_Context_Code] 
     UNIQUE ([Code]) ; 
CREATE TABLE [dbo].[Component] (
    [Identity] int IDENTITY (1, 1) NOT NULL, 
    [ContextLink] int NOT NULL, 
    [Naam] nvarchar (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [Code] nvarchar (10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [Omschrijving] ntext COLLATE SQL_Latin1_General_CP1_CI_AS NULL) ; 
ALTER TABLE [dbo].[Component] 
    ADD CONSTRAINT [FK_ComponentContext] 
     FOREIGN KEY ([ContextLink]) 
     REFERENCES [dbo].[Context] ([Identity]) ; 

(上面的腳本應該創建兩個。) 基本上,我有指上下文表的部件表。

我使用這兩個表創建了一個動態數據站點,.NET將爲我處理引用。這是快速提供基本網站的好方法,所以我們可以先繼續處理業務邏輯。

然而,當我看到在DDS組件表,我注意到參考顯示上下文,而不是名稱代碼場。那麼,在顯示上下文表的引用鏈接時,我該如何強制DDS使用Name字段呢?

(最好用簡單的東西,因爲我處理了60桌是與此類似。他們中的大多數簡單的查找表,使過濾更容易。)

因爲我們不打算在這個Web應用程序的GUI一邊工作了幾個月,在DDS源本身中無法改變某些東西。如果它可以在數據庫或實體模型中修復,那麼請讓我知道!


我用於這個項目的數據模型很簡單:每個表都有一個主鍵「Identity」,它是一個autoIncrement字段。 Code和Naam(名稱)字段用於描述特定數據,並在其他應用程序中用於填充組合框和過濾器。這些應用程序不直接與數據庫通信,但它們使用基於數據庫的導出XML。在此導出XML中,指向「身份」的鏈接將替換爲指向「代碼」的鏈接。這允許用戶將代碼更改爲他們喜歡的任何內容,而不需要遍歷整個數據庫來調整引用。 數據庫只有一個目的:使多個用戶更容易維護其他應用程序使用的XML數據。我們有大約5人每天24小時對這些數據進行修改,每週生成一次導出XML,然後發送給我們的客戶。 (誰主要在離線應用程序中使用此數據,以及具有有限互聯網連接的筆記本電腦。)

+0

翻譯爲好奇:納摩=名稱,Omschrijving =評論。其餘的只是英文名字。所以現在你知道兩個英文單詞的荷蘭語翻譯。 :-) – 2009-06-15 12:55:27

回答

0

找到了!但它很討厭,因爲它涉及編輯實體模型本身。 首先,右鍵單擊實體模型並選擇「打開方式」以使用XML編輯器打開文件。然後,轉到標籤並查看它以搜索名稱是子表名稱的節點。 (「組件」在我的情況是這樣的:

<EntityType Name="Component"> 
    <Key> 
    <PropertyRef Name="Identity" /> 
    </Key> 
    <Property Name="Identity" Type="Int32" Nullable="false" /> 
    <Property Name="Code" Type="String" Nullable="false" /> 
    <Property Name="Naam" Type="String" Nullable="false" /> 
    <Property Name="Omschrijving" Type="String" Nullable="true" /> 
    <NavigationProperty Name="Context" Relationship="Content_Model.FK_Component Context" FromRole="Component" ToRole="Context" /> 
</EntityType> 

你可能注意到了,它把「代碼」,「名稱」之前。切換這兩行,你會得到這樣的:

<EntityType Name="Component"> 
    <Key> 
    <PropertyRef Name="Identity" /> 
    </Key> 
    <Property Name="Identity" Type="Int32" Nullable="false" /> 
    <Property Name="Naam" Type="String" Nullable="false" /> 
    <Property Name="Code" Type="String" Nullable="false" /> 
    <Property Name="Omschrijving" Type="String" Nullable="true" /> 
    <NavigationProperty Name="Context" Relationship="Content_Model.FK_Component Context" FromRole="Component" ToRole="Context" /> 
</EntityType> 

因爲無論「守則」和「名」有一個索引,DDS將選擇它在本節發現的第一個。由於我剛剛將「名稱」放在第一位,現在它成爲參考文本。

基本上,一個真正的容易解決,雖然花了一些時間來探索......

0

考慮修改您的數據模型。

我將從Component表中刪除名稱和代碼列,並從上下文表中添加Identity列,並將它們重命名爲ContextIdentity。

現在你的模型。這兩個表之間有兩個有效的鏈接,這會導致無法使用存儲和驗證檢查。

我懷疑它使用的是代碼字段,因爲這是最短的,因此最有效。

+0

其實沒有。這兩個表之間的唯一關係是Component.ContextLink - > Context.Identity。這兩個表恰好包含非常相似的字段。 – 2009-06-15 12:12:08