0

私のアプリケーションには、最初にコードを使用してテーブルにマップされている基本クラスからプロパティを継承するクラスがあります。

データベースを見ると、すべてが期待どおりに機能しています。すべての値が期待どおりに入力されていますが、アプリケーションがクラッシュしています。

取得してモデルとしてビューに渡されたレコードを調べると、所有者フィールドと作成者フィールドが空白であることがわかりますが、データベースの継承されたテーブルでは、ID に有効なユーザー ID が入力されていることがわかります...なぜこれらはマッピングされていませんか?

これは、値が入力されて正しく追加されたモデルです。

これは、同じアイテムIDのルックアップを行った後に私のビューが得ているものです

ベースクラス

    public class SiteModel
{
    public SiteModel() { }
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public string EntityType { get; set; }

    public DateTime Created { get; set; }

    [ForeignKey("Creator")]
    public int CreatorID;
    public SiteAccount Creator { get; set; }

    [ForeignKey("Owner")]
    public int OwnerID;
    public SiteAccount Owner { get; set; }

    [ForeignKey("Parent")]
    public int? ParentID;
    public SiteModel Parent { get; set; }

    public List<SiteModel> Children { get; set; }

    public SiteModel(SiteAccount creator)
    {
        Creator = creator;
        Owner = creator;
        Created = DateTime.Now;
        EntityType = this.GetType().Name;
    }
}

サブクラス

    [Table("BlogPost")]
public class BlogPost : SiteModel
{
    public BlogPost() { }
    public BlogPost(string title, string content, string description, string tags, BlogCategory category, BlogStatus status, SiteAccount creator) : base(creator)
    {
        Title = title;
        Content = content;
        Description = description;
        Tags = tags;
        Parent = category;
        Status = status;
    }

    [Required]
    public string Title { get; set; }
    [Required]
    public string Content { get; set; }

    public string Description { get; set; }
    [Required]
    public string Tags { get; set; }
    public BlogStatus Status { get; set; }
}
4

1 に答える 1

1

問題が見つかりました。リンクされたプロパティで遅延読み込みが有効になっていませんでした。これを有効にするために変更しました

public SiteAccount Creator { get; set; }

public virtual SiteAccount Creator { get; set; }

virtual キーワードにより遅延読み込みが有効になり、オブジェクト自体が取得されるたびにナビゲーション プロパティが取得されます。

于 2013-10-13T15:05:47.750 に答える