我在ASP.NET MVC 4 SPA和durandal項目中使用breezejs(帶有EF 5.0數據庫的第一個安裝程序),除了特定場景外,事情正常運行。使用Breezejs捕獲SaveChanges上的外鍵異常()
請原諒我,如果我對JavaScript和SPA的東西看起來有些不爽。我正在學習。
這裏是我從EF
2款Project.cs
public partial class Project
{
public Project()
{
this.Timesheets = new HashSet<Timesheet>();
}
public int ProjectId { get; set; }
public Nullable<int> ClientId { get; set; }
public string ProjectName { get; set; }
public string ProjectDescription { get; set; }
public Nullable<decimal> ProjectRate { get; set; }
public virtual Client Client { get; set; }
public virtual ICollection<Timesheet> Timesheets { get; set; }
}
Client.cs
public partial class Client
{
public Client()
{
this.Projects = new HashSet<Project>();
this.Timesheets = new HashSet<Timesheet>();
}
public int ClientId { get; set; }
public string ClientNo { get; set; }
public string ClientName { get; set; }
public string CompanyName { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
public string County { get; set; }
public Nullable<decimal> ClientRate { get; set; }
public string EmailAddress { get; set; }
public virtual ICollection<Project> Projects { get; set; }
public virtual ICollection<Timesheet> Timesheets { get; set; }
}
從我的客戶視圖模型
function deleteClient(model) {
app.showMessage('Are you sure you want to DELETE this record?', 'Delete a Record', ['Yes', 'No'])
.then(function (dialogresult) {
if (dialogresult == "Yes") {
models.remove(model);
model.entityAspect.setDeleted();
return saveRecord(model);
}
});
};
function saveRecord(model) {
return repository.saveEntity(model)
.fail(handleFailed);
function handleFailed(error) {
var err = "Error retrieving Clients : " + error.message;
error(err);
logger.error(err, null, null, true);
return;
}
};
摘錄的摘錄repository.js( DataContext的)
function saveEntity(masterEntity) {
return manager.saveChanges().fail(saveFailed);
function saveFailed(error) {
logger.error("Error saving : " + error.message, null, null, true);
}
}
這裏是摘自我的ProjectBillingController.cs
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
return _contextProvider.SaveChanges(saveBundle);
}
這裏是我的情況下,
我有一個行項目 「P1」 具有參考客戶 「ABC」 。如果我嘗試刪除客戶端「ABC」,breeze會在我的WEBAPI控制器「ProjectBillingController.cs」的SaveChanges內引發異常。
我知道,在SQL世界中,這應該是預期的錯誤。
但我的問題是...
- 我可以捕獲客戶端上的這一約束錯誤它獲取到服務器「ProjectBillingController.cs」過嗎?
- 我看到解決此問題的唯一方法是執行另一個查詢,以查看是否存在具有該客戶端的Project實體中的任何行,如果是這樣,則暫停刪除,否則繼續刪除。有沒有另外一種方法來完成這個?
- 我應該寫這個「驗證邏輯」我的視圖模型裏面,或者datacontent(資料庫)
我的歉意,我似乎已經解決了這個問題。我的問題是我在我的logger.error()方法中有一個錯字。它應該是logger.logError()。正因爲如此,這個錯誤並沒有被返回給客戶,而是給出了一個模糊的信息。當我通過調試運行它時,我看到外鍵約束的異常,並認爲它沒有返回到客戶端。一旦我改變了名字。該錯誤返回到saveChanges()承諾的.failed()部分,我能夠看到該錯誤。 – 2013-03-16 01:18:36