0

ソース:

DictionaryTable:

DictID     int
RUWordID   int   -> FK to RUWordsTable.RUWordID
ENWordID   int   -> FK to ENWordsTable.ENWordID

RUWordTable:

RUWordID   int
Word       string

ENWordTable:

ENWordID   int
Word       string

次の構造を使用するテーブルにデータを読み書きできるようにしたい:

RUWord   ENWord
Привет   Hello
...

MVCビューからの速度と簡単なデータアクセスの点で、私が望むことを行うための最良のオプションは何ですか。私の理解によると、SQLビューを作成して使用するオプションがあります(ただし、データのINSERTSの可能性についてはわかりません)。または、同じものを作成しますが、Visual Studio デザイナーで Entity Framework を使用します。基本的に、1 つの単語を別の方法で変換できます (他のテーブルに複数のエントリがあります)。自動挿入を使用して辞書に単語を追加する方法を見つけることが私の目標です(ソースまたは翻訳が見つからない場合は、参照テーブルに追加し、見つかった場合は既存のエントリを使用します)

4

1 に答える 1

1

それはあなたが一度に読む必要があるデータの量に大きく依存します。1つまたはいくつかの単語の翻訳を検索する場合は、EntityFrameworkモデルが最適です。大量のデータをフェッチする必要がある場合は、ビューまたはストアドプロシージャの方が適しています。しかし、私は後者が起こるとは思っていません。MVCビューでは、おそらくページングを使用します。

データの挿入に関しては、EFが実行可能な選択になります。すでにジャンクションテーブルが定義されています(DictionaryTable)。ジャンクションテーブルが透過的になるようにEFを設定できます。

class RuWord
{
    public int Id { get; set; }
    public string Word { get; set; }
    public ICollection<EnWord> EnWords { get; set; }
}

class EnWord
{
    public int Id { get; set; }
    public string Word { get; set; }
    public ICollection<RuWord> RuWords { get; set; }
}

(コードファーストで作業すると仮定します)

データ入力RussianWordsでは、コンテキストのDbSetに新しいロシア語の単語を追加し、単語のEnWordsコレクションに新しいまたは既存の英語の単語を追加して、を呼び出すことができますSaveChanges()。EFは、単語適切なレコードをジャンクションテーブルに挿入します(両方の外部キーを複合主キーとして使用します)。

しかし...実生活では、純粋なジャンクションテーブルを見ることはほとんどありません。あなたの場合、ロシア語と英語の単語の関連を登録するだけで十分だとはほとんど想像できないので、これを持ち込みます。あなたは(少なくとも)ある程度の好みを必要としないのですか?「日付」という単語の翻訳がもっとあるように、しかし好ましいものはカレンダーのものでしょう(あなたが出会い系サイトで働いているのでなければ、それでも...)。とにかく、関連付けについて記録したいものがある場合は、ジャンクションテーブルを明示的にマップし、関連付けレコードを作成する必要があります。これらの詳細はすべてコードで作成されます。

これがいくつかの方向性を与えることを願っています。


編集(コメント後)

明示的なジャンクションエンティティ(つまり、ジャンクションテーブルに対応するクラス)を使用する場合。このエンティティは、上記の2つのテーブルへの参照として2つのプロパティEnWordを持つことができます。RuWordデータ入力は、新しいDictionaryTableインスタンスを作成し、そのプロパティ(新規または既存の単語)を設定することを意味します。

于 2012-07-25T21:44:25.083 に答える