0

私は、DDD パターンのエンティティ フレームワークを使用したプロジェクトに参加しています。エンティティのデフォルトのカスタム ツールは使用せず、リポジトリといくつかのモデル クラスを使用しています。

エンティティ フレームワークに 3 つのテーブルがあります。

  1. カテゴリー
  2. カテゴリーコンテンツ
  3. コンテンツ

カテゴリcategoryContentとコンテンツcategoryContentは 1 対多の関係にあります。(CategoryContent テーブルにいくつかのプロパティがあるため、ここでは多対多を使用しません)

CategoryContentMVC でこのリストの content.Title のリストと表示のリクエストを送信すると、次のエラーが表示されました。

Unable to set field/property CategoryContents on entity type System.Data.Entity.DynamicProxies.Content_731FEFC3E064D6098DC133918117C2359E2F308D2EB1E5D8D986538641AAB7CD.

しかし、トレースしたところ、プログラムに問題はなく、データと表示が返されました。

メッセージ システム (サービス プロジェクトの要求と応答メッセージ) を使用します。

このコードは、 のリストを返すメソッドですcontentcategory

 public IEnumerable<CategoryContent> GetContents(int categoryID)
    {
        Query query = new Query();
        OrderByClause order = new OrderByClause();
        order.PropertyName = "ID";
        order.Desc = true;
        query.OrderByProperty = order;
        query.Add(new Criterion("CategoryID", categoryID, CriteriaOperator.Equal));

        return  categoryContentRepository.FindBy(query);
    }

categoryContentRepository は、Repository プロジェクトの CategoryContentRepository クラスのオブジェクトであり、DB を使用した管理作業を行います。

MVC コントローラーで:

public ActionResult Content(int id)
    {
        var contentService = ServiceFactory.CreatContentService();
        var response = contentService.GetContents(id).ToList();

        return PartialView("_Content", response);
    }

ビュー (_content.cshtml):

@model List<Plus.Model.CategoryContent>

@foreach (var item in Model)
{
    @Html.ActionLink(item.Content.Title, "Amir")
}

モデル クラス:

public class Category: ValidationBase, IAggregateRoot
{
    public int ID { get; set; }

    [NotNullOrEmpty()]
    public string Name { get; set; }

    [NotNullOrEmpty()]
    public int Ordering { get; set; }

    public int? ParentID { get; set; }
public Guid ModifiedBy { get; set; }
public DateTime ModifiedOn { get; set; }
public string ModifiedReason { get; set; }
public bool Deleted { get; set; }
public bool Active { get; set; }

    
    public virtual Category Parent { get; set; }
    public virtual IList<Category> Childeren { get; set; }
    public virtual IList<CategoryContent> CategoryContents { get; set; }
}

public class CategoryContent : ModelBase, IAggregateRoot
{
    public int ID { get; set; }
    public int ContentID { get; set; }
    public int CategoryID { get; set; }

    public virtual Content Content { get; set; }
    public virtual Category Category { get; set; }
}

public class Content: ModelBase, IAggregateRoot
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string Intro { get; set; }
    public int? ParentID { get; set; }
    public bool IsSeries { get; set; }
    public byte LikeVoteStatus { get; set; }

    public virtual IList<SubContent> SubContents { get; set; }
    public virtual Content Parent { get; set; }
    public virtual IList<Content> Childeren { get; set; }
    public virtual CategoryContent CategoryContents { get; set; }
}
4

1 に答える 1

5

コンテンツ モデルのコードにバグがあります。

public virtual CategoryContent CategoryContents { get; set; }

正しいコードは次のとおりです。

public virtual IList<CategoryContent> CategoryContents { get; set; }
于 2012-09-25T11:37:06.773 に答える