4

システム内で使用できるコードのリストがある次の構造のモデルがあります。

車とエンジンの間には 1 対 1 の関係があるため、エンジンの詳細を Car テーブルにマップして、エンジンがエンティティではなく単なるドメイン モデルの抽象化になるようにしたいと考えています。そのエンジンには、エンジン タイプを説明するコードが含まれています。

私の dbcontext には、システム内の 2 つの集約ルートであるため、CodeList と Car の DbSet があります。これをデータベースにマップしようとすると、次のエラーが発生します。

スキーマ内の各型名は一意である必要があります。型名 'コード' は既に定義されています。

Engine クラスの Navigation プロパティを削除すると問題は解決しますが、個別に検索することなく Code 値にアクセスできるようにしたいと考えています。仮想を削除してコードの id プロパティを直接マップしようとすると、コードはエンティティとして定義されており、複合型として再定義できない可能性があることがわかります。これのどこが間違っているのかわかりませんが、これは単純な使い方のようです。エンジンが複合型として扱われているように見えるため、ナビゲーション プロパティを持つことはできません。

CodeList
{
    public int Id {get;set;}
    public string Name {get;set;}
    public IList<Code> codes {get;set;}
}

Code
{
    public int Id {get;set}
    public string Value {get;set;}
}


public Car
{
    public int Id {get;set;}
    public Engine Engine {get;set;}
}

public Engine 
{
    public int Size {get;set;}
    public int TypeId {get;set;}
    public virtual Code Type {get;set;}
}
4

1 に答える 1

4

あなたの質問に出くわしたとき、私はちょうど同様の問題を抱えていました。@LadislavMrnka によると、EF では、複合型にナビゲーション プロパティを含めることはできません。どうやら、しかしNHibernate はこれをサポートしています。EF に固執する場合は、この「機能」に対応するようにモデルを変更する必要があります。とにかく、それが私がやったことです。

于 2013-03-14T04:30:49.707 に答える