8

次のようなデータコンテキストをEF5RCで作成しようとしました。

class WordContext : DbContext {
    public DbSet<Word> PossibleWords { get; set; }
    public DbSet<Word> UsedWords { get; set; }
}

データベースを更新しようとすると、次のような例外が発生しました。タイプごとの複数のオブジェクトセットはサポートされていません。オブジェクトセット「PossibleWords」と「UsedWords」の両方に、「TestProject.Word」タイプのインスタンスを含めることができます。

いくつかのグーグルの後、このようなデータコンテキストを構造化することはEFでは実際には不可能であるように見えます。

私の質問は次のとおりです。このようなデータを格納するための優れたコードファースト設計は何ですか?

些細なことは次のようなものかもしれないと思います:

class WordContext : DbContext {
    public DbSet<Words> Words { get; set; } 
}

class Words {
    public int ID { get; set; }
    public IList<string> PossibleWords { get; set; }
    public IList<string> UsedWords { get; set; }
}

しかし、これはひどい感じです。

編集:もちろん、もう1つの簡単な方法は、次のような2つの異なる単語タイプを使用することです。

クラスPossibleWord{...}クラスBannedWord{...}

実は、書き留めたので、それほど悪くはないようです、うーん...

Edit2:

他の誰かがこれに遭遇した場合に備えて、最終的にどのように解決されたかを示します。

class Word {
    [Key]
    public string String { get; set; }
}
class PossibleWord : Word { }
class UsedWord : Word { }

class WordContext : DbContext {
    public DbSet<PossibleWord> PossibleWords { get; set; }
    public DbSet<UsedWord> UsedWords { get; set; }
}
4

1 に答える 1

7

おそらく、元のコードで2つの異なるテーブルを表現しようとしています。UsedWordとPossibleWordの2つのクラスを検討し、両方に共通のインターフェイスを実装させます。たとえば、IWord?または、もっと簡単に言えば、Wordにブール値の「IsUsed」フィールドと1つのテーブル/タイプを設定するだけです。

于 2012-08-11T10:59:04.107 に答える