C# Breeze-如何在保存更改调用之前处理同一视图中两个实体的状态

C# Breeze-如何在保存更改调用之前处理同一视图中两个实体的状态,c#,javascript,angularjs,breeze,C#,Javascript,Angularjs,Breeze,我有3个实体项目,附件和消息。项目可以有多个附件和消息 问题是在项目详细视图上,我列出了它的消息和附件(如果有),或者允许用户添加新附件并发布新消息。这是我的视图的快照 一旦用户添加了新附件,即通过管理器创建的新附件实体,并在上传文件后,立即将更改保存到服务器。但在项目详细视图呈现之前,我还为消息创建了一个新实体,当创建附件实体并调用保存更改时,该实体会抛出验证错误,这是有意义的。那么,我将如何处理这两个实体的状态呢?这是我的密码 模型类 Project.cs Public class Pro

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

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

一旦用户添加了新附件,即通过管理器创建的新附件实体,并在上传文件后,立即将更改保存到服务器。但在项目详细视图呈现之前,我还为消息创建了一个新实体,当创建附件实体并调用保存更改时,该实体会抛出验证错误,这是有意义的。那么,我将如何处理这两个实体的状态呢?这是我的密码

模型类

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

}
附件.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.
    });
}

本质上,这将只调用附件对象上的保存更改,并忽略消息中的验证错误

附件和messagesNo之间是否存在任何关系。它们中的每一个都与ProjectId有关系ProjectId是两个表的外键如果保存邮件和附件实体意味着您需要ProjectId验证错误显示与邮件相关。因为创建了新的消息实体get,当我调用save更改时,它需要不可为空的消息。你能把问题再读一遍吗?你能把3个实体类文件发送过来吗?请回答这个问题。我在努力寻找一个如何保存一条记录的例子
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.
    });
}