2016-05-01 5 views
1

OnModelCreatingでベースを呼び出した後の最初の行でエラーが発生するのはなぜですか?このエラーが発生するコメント行:一方のエンドからリレーションシップを定義しても、他方のエンドから定義するとエラーが発生します

式 'x => value(Blog.Services.Db).ContentItems'は有効なプロパティ式ではありません。式はプロパティへのアクセスを表す必要があります: 't => t.MyProperty'。 パラメータ名:propertyAccessExpression

protected override void OnModelCreating(ModelBuilder mb) 
    { 
     base.OnModelCreating(mb); 
     mb.Entity<ContentGroup>().HasMany(x => ContentItems).WithOne(x => x.ContentGroup).HasForeignKey(x => x.ContentGroupID); // same effect as following line but throws an error 
     //mb.Entity<ContentItem>().HasOne(x => x.ContentGroup).WithMany(x => x.ContentItems).HasForeignKey(x => x.ContentGroupID); // same effect as previous line but works 

    } 

ContentGroup:

public class ContentGroup 
{ 
    public int ID { get; set; } 
    public int SiteID { get; set; } 
    public string Description { get; set; } 
    public int Sequence { get; set; } 
    public bool Active { get; set; } 
    public virtual Site Site { get; set; } 
    public virtual ICollection<ContentItem> ContentItems { get; set; } 
} 

のContentItem:

public class ContentItem 
{ 
    public int ID { get; set; } 
    public string ContentType { get; set; } 
    public int ContentGroupID { get; set; } 
    public DateTime? PublishDate { get; set; } 
    public DateTime? LastModifyDate { get; set; } 
    public string ChangeFrequency { get; set; } 
    public decimal? Priority { get; set; } 
    public bool Active { get; set; } 
    public string Slug { get; set; } 
    public string Title { get; set; } 
    public string MenuText { get; set; } 
    public string URI { get; set; } 
    public string Abstract { get; set; } 
    public string Icon { get; set; } 
    public string Tags { get; set; } 
    public bool AllowComments { get; set; } 
    public virtual ICollection<Comment> Comments { get; set; } 
    public virtual ContentGroup ContentGroup { get; set; } 
    public virtual ICollection<MenuContentItem> MenuContentItems { get; set; } 
} 

答えて

1

最初の文で HasForeignKey()方法は ContentGroupエンティティではない ContentItemエンティティに反映されます。 ContentGroupエンティティには ContentGroupIdプロパティがないため、動作しません。

UPDATE:

The expression 'x => value(Blog.Services.Db).ContentItems' is not a valid property expression. The expression should represent a property access: 't => t.MyProperty'. Parameter name: propertyAccessExpression

それが発生した例外メッセージによると、最初の文の中で、あなたは.HasMany(x => ContentItems)を持っているが、それは.HasMany(x => x.ContentItems)でなければなりませんので。

+0

ガボット、あなたの答えはありがたいですが、残念ながらそれは正しくありません。 HasForeignKeyメソッドは、ContentItemをパラメータとして取ります。それがContentGroupを取った場合、ビルドさえできません。 – Sam

+0

@Sam、あなたの投稿の例外メッセージを考慮して私の答えを更新しました。 – Gabor

+0

ありがとうGabor !!!! – Sam

関連する問題