EntityFramework 5.0使用SaveContext无法使用子节点保存对象

时间:2013-02-03 22:38:16

标签: c# entity-framework-5

我有一个具有共同属性的基础对象:

public abstract class BaseItem
    {
        [Required]
        public  User ModifiedUser { get; set; }

        [Required]
        public User CreatedUser { get; set; }
    }

所有其他对象都是从上面继承的,但是当我尝试使用SaveContext进行保存时,它不能用于错误: ModifiedUser - ModifiedUser字段是必需的。 CreatedUser - CreatedUser字段是必需的。

类别对象:

public class Category : BaseItem, INotifyPropertyChanged
    {
        public int CategoryId { get; set; }

        public string Name { get; set; }
...
   }

保存类别的方法:

public List<Category> SaveCategories(Category[] categories)
        {
            try
            {
                using (EntityContext context = new EntityContext())
                {
                    context.Category.AddOrUpdate(categories);
                    context.SaveChanges();
                }
                ...
            }
 catch (DbEntityValidationException e)
            {
...
}
}

我使用了AddOrUpdate(),但我也尝试先从数据库中获取一个类别,然后调用context.SaveChanges();但是我得到了同样的错误。

我在这里做错了什么想法?

## Update ##

我想我发现了为什么会这样。问题在于BaseItem,它是我拥有ModifiedUser和CreatedUser的所有其他类的基类。好吧,我还有一个继承自baseitem的User类。所以现在我面临着BaseItem和User之间的循环依赖。 或者在这种情况下,由于User继承自BaseItem,我们对自引用对象有一个循环依赖。

public class User : BaseItem
    {
        public int UserId { get; set; }

        [Required]
        public string UserName { get; set; }
    }

我尝试将ModifiedUser和CreatedUser设为虚拟,但我有WCF,它不会序列化。

1 个答案:

答案 0 :(得分:0)

在类别数组中的每个类别对象上,ModifiedUser和CreatedUser是否为null?它们不能为空,因为您将它们标记为必需。