我在 ASP.NET MVC 4 SPA 和带有 EF 5.0 数据库的 durandal 项目中使用了微风,除了某些情况外,一切正常。
如果我在 javascript 和 SPA 方面看起来有点菜鸟,请原谅我。我边走边学。
这是我的 2 个 EF 模型
项目.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; }
}
客户端.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(数据上下文)
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);
}
这是我的场景,
我有一个对客户“ABC”的引用的项目“P1”。如果我尝试删除客户端“ABC”,微风会在我的 WEBAPI 控制器“ProjectBillingController.cs”的 SaveChanges 内引发异常。
我知道在 SQL 世界中,这应该是预期的错误。
但我的问题是...
- 我可以在客户端到达服务器“ProjectBillingController.cs”之前捕获此约束错误吗?
- 我认为解决此问题的唯一方法是进行另一个查询,以查看该客户端的 Project 实体中是否有任何行,如果有,则停止删除,否则继续删除。还有另一种方法可以做到这一点吗?
- 我应该在我的视图模型或数据内容(存储库)中编写这个“验证逻辑”吗