0

同じテーブルにリレーションシップを作成しました。リレーションシップはOnModelCreatingで宣言されています。以下のコードを参照してください。

次のコードですべてのアイテムを取得しようとするとvar allitems = MyContext.WallItems 、次のエラーが発生します:「/」アプリケーションのサーバーエラー。タイプ'WallItem'のオブジェクトをタイプ'System.Collections.Generic.List`1[WallItem]'にキャストできません。

私は私の関係を間違った方法で定義しましたか、それともより良い方法がありますか?

[Table("WallItems")]
public class WallItem
{
    public WallItem() { Id = Guid.NewGuid(); }

    /// <summary>
    /// Item Id
    /// </summary>
    [Key]
    public Guid Id { get; set; }

    /// <summary>
    /// Enables replies on wall items. Links to the root item.
    /// </summary>
    public Guid? ThreadRoot { get; set; }

    /// <summary>
    /// Collection of replies
    /// </summary>
    public virtual List<WallItem> Comments { get; set; }

}

public class MyContext : DbContext
{
    public DbSet<WallItem> WallItems { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<WallItem>()
                            .HasOptional(c => c.Comments)
                            .WithMany()
                            .HasForeignKey(c => c.ThreadRoot);
    }
}
4

1 に答える 1

1

Fluent API の設定に誤りがあります。これはうまくいきます:

modelBuilder.Entity<WallItem>()
    .HasMany(c => c.Comments)
    .WithOptional()
    .HasForeignKey(c => c.ThreadRoot);
于 2012-05-31T19:57:51.050 に答える