无法在实体上设置字段/属性

时间:2012-09-24 13:22:04

标签: c# entity-framework

我一直在用ddd模式中的实体框架进行项目。我不使用实体的默认自定义工具,我有存储库和一些模型类。

我的实体框架中有3个表:

  1. 分类
  2. CategoryContent
  3. 内容
  4. 具有categoryContent的类别和具有categoryContent的内容具有1对多的关系。 (我在这里不使用很多,因为我在CategoryContent表中有一些属性)

    当我发送一个CategoryContent列表请求并显示内容时。在MVC中显示此列表的标题我看到了这个错误:

    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; }
    }
    

1 个答案:

答案 0 :(得分:2)

内容模型代码有一个错误:

public virtual CategoryContent CategoryContents { get; set; }

,正确的代码是:

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