如何在save changes调用之前处理同一个视图中两个实体的状态

本文关键字:两个 状态 实体 视图 save changes 调用 同一个 前处理 | 更新日期: 2023-09-27 18:12:22

我有3个实体Project, AttachmentMessages。项目可以有多个附件和消息。

问题是在项目详细信息视图,我列出它的消息和它的附件(如果有的话)或允许用户添加新的附件和发布新的消息。这是我的视图的快照

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');
    }

如何在save changes调用之前处理同一个视图中两个实体的状态

如果您想创建附件而不保存消息,您可以这样做-

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 ,并忽略消息中的验证错误。