データベースから項目を必死に削除しようとしましたが、これまでのところ機能させることができませんでした。表示されるエラー メッセージは次のとおりです。
"The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable."
私は EDMX (データベースが最初) と POCO オブジェクトで EF4.1 を使用しています。各タイプのリポジトリと、基本メソッドを実装する一般的なリポジトリがあります。
特定の問題は、アイテムを削除したいときです。子を削除することは問題ではありません-すべてが完全に機能します-問題は、エンティティ自体を削除するときです。
次のモデルを検討してください。「Bar」と1対多の関係を持つエンティティ「Foo」があります。リポジトリで次のメソッドを呼び出します。
public override void Delete(Models.Foo entity)
{
//Load the child items...
base.Context.Entry(entity).Collection(x => x.Bars).Load();
//Bar
BarRepository barRep = new BarRepository();
foreach (var item in entity.Bars)
{
var obj = barRep.GetById(item.ID);
barRep.Delete(obj);
}
barRep.Save();
//First attempt
//base.Delete(entity);
//base.Save();
//Have to resort to some SQL
base.ExecuteSqlCommand(string.Format("delete from Foo where ID = {0}", entity.ID));
}
GenericRepository の「削除」メソッドは次のとおりです。
public virtual void Delete(T entity)
{
_entities.Set<T>().Remove(entity);
}
GenericRepository の「保存」メソッドは単純です。
public virtual void Save()
{
_entities.SaveChanges();
}
私が働きたいのはこれです:
//First attempt
//base.Delete(entity);
//base.Save();
残念ながら、アイテムを削除する唯一の (現在) 方法は、_entities.Database.ExecuteSqlCommand(SQL) を呼び出す SQL を実行することです。
私はたくさんのことを読みましたが、何もうまくいかないようです。何が起こっているのかを理解しようとする助けをいただければ幸いです。
ありがとう、
ホセ