は、私はこの問題は、私は子オブジェクトをこのようおよびEFを削除しようとするということであるasp.net MVCアプリケーションでのこの単純な削除] GETとPOSTメソッドEF外部キー制約とリポジトリパターン
public ActionResult Delete(int ehrId, int id)
{
EHR ehr = ehrRepository.FindById(ehrId);
PhysicalTest test = ehr.PhysicalTests.Where(t => t.ID == id).Single();
return View(test);
}
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int ehrId, int id)
{
EHR ehr = ehrRepository.FindById(ehrId);
PhysicalTest test = ehr.PhysicalTests.Where(t => t.ID == id).Single();
ehr.PhysicalTests.Remove(test);
unitOfWork.Commit();
TempData["Success"] = "You have deleted the Physical Test Succesfully";
return RedirectToAction("Index");
}
を持っています
操作が失敗しました: 1つ以上の外部キーのプロパティがnullにできないため、関係を変更できませんでした。リレーションシップに が変更された場合、関連する外部キープロパティはNULL値に設定された です。外部キーがNULL値をサポートしていない場合は、 新しい関係を定義する必要があります。外部キーのプロパティは に別のNULL以外の値を割り当てる必要があります。または、関連しないオブジェクトは を削除する必要があります。
一つの答えはPhysicalTest(子要素)の代わりにEHRRepositoryのリポジトリを使用することです..しかし、それdoesntのは、私は常にユーザーを避けるために、親オブジェクトを介して照会のセキュリティを強化したい、良い解決策の原因のように見えます彼に属していないphysicalTestの編集/削除から。
私はちょうど根を集約するために私のリポジトリを制限するのが大好きです。
Heres私の現在のSqlRepository一般的な実装....私は提案を開く。 PhyscialTest
がEHRなしでは存在できないため、EHR
は(あなたの例外がFKをPhysicalTest
にはnullにすることはできませんと言う)PhysicalTest
の集計ルートです
public class SqlRepository<T> : IRepository<T>
where T : class, IEntity {
internal SummumnetDB context;
internal DbSet<T> _objectSet;
public SqlRepository(SummumnetDB context)
{
this.context = context;
this._objectSet = context.Set<T>();
}
public IQueryable<T> Find(Expression<Func<T, bool>> predicate) {
return _objectSet.Where(predicate);
}
public void Add(T newEntity) {
_objectSet.Add(newEntity);
}
public void Remove(T entity) {
_objectSet.Remove(entity);
}
public IQueryable<T> FindAll()
{
return _objectSet;
}
public T FindById(int id)
{
return _objectSet.Single(o => o.ID == id);
}
}