0

質問はタイトルにあります。以下のような Model クラスのオブジェクトが参照するデータベース テーブルをプログラムで変更し、新しいテーブルを操作し続けることはできますか?

public class Word
{
    public int ID { get; set; }
    public string Text { get; set; }
}

これはもともとEntityFrameworkで「単語」テーブルを自動的に参照するものですが、実行前/実行中に変更する方法はありますか? もしそうなら、どのように?

編集:

プロジェクトのビューで使用されるすべての文字列を、データベース テーブル "Words" から ID で取得します。ここで、ユーザーがシステムに新しい言語を入力すると、WordsEnglish などの新しいテーブルが作成されます。それ以降、ユーザーが言語として英語を選択した場合、Word オブジェクトは WordEnglish を参照します。

4

2 に答える 2

1

達成しようとしていることをよりよく理解するためにユースケースを使用することが望ましいですが、ここでは...

DbContext.OnModelCreatingメソッドでは、モデルを構成できます。

// Removes pluralization convention for all tables.
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

また

// Specific table name for Word Entity.
modelBuilder.Entity<Word>().ToTable("TableContainingWords");

モデルを変更する場合は、Code First Migrationsが必要になることがあります。

于 2012-12-25T08:58:42.110 に答える
0

実行時に EF モデルを真に動的に拡張する方法が見つかりませんでした。DB コンテキストで継承されたクラスで何が起こっているかを考えると、パフォーマンスのために生成されたビューを使用し、モデル クラスのアプローチを使用して、再コンパイルを回避することは難しいようです。コードを生成し、コンパイルして、アセンブリ検出アプローチを使用してこれにアクセスしました。しかし、これは私の観点からはすべて不十分であるため、このパスの調査を停止しました。非常に不格好な結果。

皮肉なことに、このような問題のユースケースとしてあなたが提供するトピックは、私の見解では動的 EF を必要としないトピックです。

私はまったく同じユースケース、メッセージ/ラベルなどの言語固有の外観、つまり言語固有のテキストプールを持っています。

クラス/テーブルに言語を追加してみませんか。サポートされている言語のテーブルまたは Enum を使用します。Textpool テーブルで言語を使用する

プレゼンテーションには別のモデル クラスを使用します。(モデルを見る)。のように表示できます。

public class Word
{
     Guid ID {get;set;}                   // logical key is WordID + Language
     public int WordID { get; set; }      // implement with new id or 2 field key
     public Language Language {get;set;}    // see cultureInfo for more details 
     public bool IsMaster {get;set;}
     public string Text { get; set; }    // consider renaming due to reserved word implications
}

public class language
{
 int ID,
 String Lang
}

}
于 2012-12-26T03:48:46.237 に答える