ASP.NET MVC 4SPAおよびEF5.0データベースの最初のセットアップを使用したdurandalプロジェクトでbreezejsを使用していますが、特定のシナリオを除いて正常に動作しています。
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);
}
これが私のシナリオです、
クライアント「ABC」への参照を持つ行プロジェクト「P1」があります。クライアント「ABC」を削除しようとすると、WEBAPIコントローラー「ProjectBillingController.cs」のSaveChanges内でそよ風が例外をスローします。
SQLの世界では、これが予想されるエラーになるはずです。
しかし、私の質問は...
- サーバー「ProjectBillingController.cs」に到達する前に、クライアント側でこの制約エラーをキャプチャできますか?
- この問題を解決する唯一の方法は、別のクエリを実行して、そのクライアントのProjectエンティティに行があるかどうかを確認し、ある場合は削除を停止し、そうでない場合は削除を続行することです。これを達成する別の方法はありますか?
- この「検証ロジック」をビューモデルまたはデータコンテンツ(リポジトリ)内に記述する必要があります