2017-12-21 13 views
0

を含める:Entity Frameworkは - 私はEFコア2.0でエンティティクラスを持っているのComplexType

public class Component : BaseModel 
{ 
    [Required] 
    public string Name { get; set} 
    public virtual ICollection<ComponentInstance> ComponentInstances { get; set; } 
    public virtual Title Title {get ; set;} 
} 

と別のComplexTypeクラス:

[ComplexType] 
public class Title 
{ 
    public string Text { get; set; } 
    public string Color { get; set; } 
    public string BackgroundColor { get; set; } 
} 

は、このコードを実行:

var component = _dbContext.Company 
          .Where(x => x.Id == componentId) 
          .Include(x => x.Title) 
          .FirstOrDefault(); 

スロー例外:

プロパティ 'Title'は、エンティティタイプ 'Component'のナビゲーションプロパティではありません。 'Include(文字列)'メソッドは、 '。'でのみ使用できます。ナビゲーションプロパティ名の区切りリスト。

+1

から継承するクラスのDbSet<Component>DbSet<Title>性質を持っている必要があります。 –

+0

@ brunttoast1 私は試しましたが、それでも同じ例外が発生します プロパティ 'Title'は、エンティティタイプ 'Component'のナビゲーションプロパティではありません。 'Include(文字列)'メソッドは、 '。'でのみ使用できます。ナビゲーションプロパティ名の区切りリスト。 –

+0

これはあなたの役に立つでしょう:https://stackoverflow.com/questions/46838328/the-property-x-is-not-a-navigation-property-of-entity-type-y –

答えて

0

まだ苦労している場合は、[ForeignKey("")]をクラスに追加する必要があります。このよう :

public class Component : BaseModel 
    { 

     [Required] 
     public string Name { get; set} 
     public virtual ICollection<ComponentInstance> ComponentInstances { get; set; } 
     [ForeignKey("Title")] 
     public Title Title {get ; set;} 
    } 
+0

しかし、タイトルクラスは私のエンティティではありませんそれはComplexTypeではなく、主キーも持っていません。それはうまくいくと思いますか? –

+0

これは、外部キーを定義せずにアクションを実行することができないため、問題です。 –

0

最も可能性の問題は、あなたのComponentクラスでは、Titleプロパティvirtualとしてマークされていないということです。

virtualエンティティフレームワークではない場合は、それを無視し、コンテキストを持つエンティティとしては見なしません。

今、あなたは仮想としてそれをマークした場合でも、それはまだ、必ずしもそのような場合には、あなたがEntity Framework's Fluent API

との関係を指定する必要があるので、エンティティフレームワークは、エンティティとしてそれを認識することを意味するわけではない場合、コンポーネントクラスの関係Convention over Configurationに基づいてエンティティフレームワークに対しては明確ですが、流暢なAPIとの関係を明示的に述べる必要はありません。

あなたは明らかにも、正確な例外を提供してくださいDbContextクラス

+0

私はDbContext型クラスにDbSet を持っています。また、タイトルも –

+0

の@AsifKhanの前に存在しています。サンプルコードに仮想はありませんか? –

+0

はい、そこにはありませんでしたが、あなたのコメントの後に私も仮想で試しました –

関連する問題