如何在save changes调用之前处理同一个视图中两个实体的状态
本文关键字:两个 状态 实体 视图 save changes 调用 同一个 前处理 | 更新日期: 2023-09-27 18:12:22
我有3个实体Project
, Attachment
和Messages
。项目可以有多个附件和消息。
问题是在项目详细信息视图,我列出它的消息和它的附件(如果有的话)或允许用户添加新的附件和发布新的消息。这是我的视图的快照
https://www.dropbox.com/s/9dfddv9oa7wo8rk/view.PNG一旦用户添加了新的附件,通过管理器创建了新的附件实体,并在上传了文件之后,保存更改立即调用到服务器。但是在项目细节视图渲染之前,我还为消息创建了一个新的实体,当附件实体创建和保存更改调用时抛出验证错误,这是有意义的。那么,如何处理这两个实体的状态呢?这是我的代码
模型类
Project.cs
Public class Project
{
public int Id { get; set; }
[Required, MaxLength(50)]
public string Title { get; set; }
[Required, StringLength(2000, ErrorMessage = "Enter {0} between {1} to {2} characters long", MinimumLength = 300)]
public string Description { get; set; }
[Required, Range(10, 10000)]
public int Budget { get; set; }
[Required]
public DateTime Created { get; set; }
public ICollection<Attachment> Attachment { get; set; }
public ICollection<Messages> Messages { get; set; }
}
Messages.cs
public class Messages
{
public int Id { get; set; }
public int ProjectId { get; set; }
[Required]
public string Text { get; set; }
public Project Project { get; set; }
}
Attachment.cs
public class Attachment
{
public int Id { get; set; }
public int ProjectId { get; set; }
public string Name { get; set; }
public string Path { get; set; }
public Project Project { get; set; }
}
Controller.js
function activate() {
getNewMessage();
common.activateController([getProject()], controllerId)
.then(function () {
});
}
function addNewAttachment(file) {
var attachment = datacontext.createNewAttachment();
//other stuff
return datacontext.save()
.then(function () {
});
}
function getNewMessage() {
vm.message = datacontext.createNewMessage();
}
datacontext.js
function createNewMessage() {
return manager.createEntity('Messages');
}
function createNewAttachment() {
return manager.createEntity('Attachment');
}
如果您想创建附件而不保存消息,您可以这样做-
function attachOnly(attachment) {
// Put the attachment in an array to pass to your entity manager
var entitiesToSave = [attachment];
// em is your entity manager
em.saveChanges(entitiesToSave).then(function(saveResult) {
// save was successful
}).fail(function (e) {
// e is any exception that was thrown.
});
}
本质上,这将只调用附件对象上的上的save changes ,并忽略消息中的验证错误。