1
數據庫記錄讓我們假設我有我的生成表以下類別:刪除與EF6
public class Car
{
public Guid Id { get; set; }
public Guid OwnerId { get; set; }
public string Color { get; set; }
public virtual Owner Owner { get; set; }
}
public class Owner
{
public Guid Id { get; set; }
public string Name { get; set; }
public ICollection<Car> Cars { get; set; }
}
在我的DbContext類我創建除去汽車的方法。我想知道什麼是以下兩種方法之間的差異,如果它的事項哪種方法我用:
方法1:
public class CarDbContext : DbContext
{
public DbSet<Car> Car { get; set; }
public DbSet<Ownerr> Owner { get; set; }
public CarDbContext(string cs) : base (cs) {}
public void RemoveCar(Car car)
{
Car.Attach(car);
Car.Remove(car);
SaveChanges();
}
}
方法2:
public class CarDbContext : DbContext
{
public DbSet<Car> Car { get; set; }
public DbSet<Ownerr> Owner { get; set; }
public CarDbContext(string cs) : base (cs) {}
public void RemoveCar(Car car)
{
Entry(car).State = EntityState.Deleted;
SaveChanges();
}
}
如果我現在想要刪除所有者,因爲汽車是依賴的,我現在使用的方法會是什麼?
爲了澄清,如果我調用'Owner.Remove(owner)'代碼會崩潰,因爲Car表中有一個記錄取決於該所有者。如果我調用Entry(所有者).State = EntityState.Deleted;'那麼所有者將被刪除,並且在車表中現在沒有所有者的孤兒記錄。它是否正確?我基於你所提供的鏈接所閱讀的內容。 – Bojan
這完全取決於您的數據庫密鑰的設置方式以及您的實體如何配置。 Remove()不太可能拋出異常,因爲它應該通過刪除它們或清空外鍵來照顧子實體,而EntityState.Deleted將導致數據庫拋出異常 –
您最好的選擇是設置一個沙箱您的上下文指向SQL的本地實例,並嘗試使用每種方法來驗證行爲 –