共通のプロパティを持つ基本オブジェクトがあります。
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(); を呼び出そうとしました。しかし、同じエラーが発生します。
ここで私が間違っていることはありますか?
## アップデート ##
なぜこれが起こっているのかがわかったと思います。問題は、ModifiedUser と CreatedUser を持つ他のすべてのクラスの基本クラスである BaseItem にあります。さて、baseitem から継承する User クラスもあります。だから今、私は BaseItem と User の間の循環依存に直面しています。あるいは、この場合、User は BaseItem を継承しているため、自己参照オブジェクトに循環依存関係があるのかもしれません。
public class User : BaseItem
{
public int UserId { get; set; }
[Required]
public string UserName { get; set; }
}
ModifiedUser と CreatedUser を仮想として作成しようとしましたが、WCF があり、シリアル化されません。