Я использую breezejs в проекте ASP.NET MVC 4 SPA и durandal с первой настройкой базы данных EF 5.0, и все работает нормально, за исключением определенного сценария.
Простите меня, если я кажусь немного нубом в отношении javascript и материалов SPA. Я учусь на ходу.
вот мои 2 модели от EF
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; }
}
Клиент.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;
}
};
выдержка из репозитория.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);
}
Вот мой сценарий,
У меня есть проект строки "P1", в котором есть ссылка на клиента "ABC". Если я попытаюсь удалить клиент «ABC», ветер вызовет исключение внутри SaveChanges в моем контроллере WEBAPI «ProjectBillingController.cs».
Я знаю, что в мире SQL это должно быть ожидаемой ошибкой.
Но мои вопросы...
- Могу ли я зафиксировать эту ошибку ограничения на стороне клиента до того, как она попадет на сервер «ProjectBillingController.cs»?
- Единственный способ, которым я вижу решение этой проблемы, - это выполнить другой запрос, чтобы увидеть, есть ли какие-либо строки в объекте Project с этим клиентом, и если да, то остановить удаление, в противном случае продолжить удаление. Есть ли другой способ сделать это?
- Должен ли я написать эту «логику проверки» внутри моей модели представления или содержимого данных (репозиторий)