質問

私には2つのテーブルがあります:

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の両方を使用して動的なデータサイトを作成しました。基本的なWebサイトをすばやく提供するための良い方法であるため、最初にビジネスロジックに取り組み続けることができます。

ただし、DDSのコンポーネントテーブルを見ると、参照が コード コンテキストのフィールドではなく 名前 分野。それでは、コンテキストテーブルへの参照リンクを表示するときに、代わりにDDSに名前フィールドを使用させるにはどうすればよいですか?

(できれば、これに似た60を超えるテーブルを扱っているので、シンプルなものを使用することができます。それらのほとんどは、フィルタリングを簡単にするための簡単なルックアップテーブルです。)

数か月間、このWebアプリケーションのGUI側で作業するつもりはないため、DDSソース自体の何かを変更する選択肢はありません。データベースまたはエンティティモデルで修正できる場合は、お知らせください!


私がこのプロジェクトに使用するデータモデルは簡単です。すべてのテーブルには、自動挿入フィールドである主要なキー「アイデンティティ」があります。コードとNAAM(名前)フィールドは特定のデータを記述するためであり、他のアプリケーションで使用されてコンボボックスとフィルターを埋めます。これらのアプリケーションはデータベースと直接通信しませんが、データベースに基づいてエクスポートXMLを使用します。このエクスポートXMLでは、「ID」へのリンクが「コード」へのリンクに置き換えられます。これにより、ユーザーは、参照を調整するためにデータベース全体を通過する必要なく、好きなものにコードを変更できます。データベースには1つの目的しかありません。いくつかのユーザーが別のアプリケーションが使用するXMLデータを維持しやすくすることです。約24時間年中無休でこのデータを修正する約5人がいて、XMLのエクスポートが週に約1回生成され、顧客に送信されます。 (主にこのデータをオフラインアプリケーションで使用し、インターネット接続が限られているラップトップで。)

役に立ちましたか?

解決 2

それを見つけた!ただし、エンティティモデル自体の編集が含まれているため、厄介です。まず、エンティティモデルを右クリックし、「with with」を選択して、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>

ご存知のように、「名前」の前に「コード」を置きます。これらの2行を切り替えると、これを取得します。

<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はこのセクションで最初に発見したものを選択します。最初に「名前」を入れたばかりなので、参照のテキストになります。

基本的に、本当に簡単な修正ですが、発見するのに時間がかかりました...

他のヒント

データモデルの改訂を検討してください。

コンポーネントテーブルから名前とコード列を削除し、コンテキストテーブルからID列を追加し、両方のテーブルでコンテキストのように名前を変更します。

あなたのモデルが今のように。テーブル間には2つの有効なリンクがあります。これにより、ストレージの不安の使用とvalidaionチェックが発生します。

これは最短であり、したがって最も効率的であるため、コードフィールドを使用していると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top