简体   繁体   English

EFPersistenceManager.saveChanges之后缺少“ $ id”“ $ type”

[英]“$id” “$type” missed after EFPersistenceManager.saveChanges

I use breeze and aspnetcore in a aulrelia project. 我在aulrelia项目中使用微风和aspnetcore。 when I create new record(A) and save it to database, all work fine, but when I continue to create record(B) to save, the controller still received record A from front-end, then I debugged and compared with another aspnet project which used breeze also. 当我创建新记录(A)并将其保存到数据库时,一切正常,但是当我继续创建要保存的记录(B)时,控制器仍从前端接收记录A,然后进行调试并与另一个aspnet进行比较也使用了微风的项目。 It shows me that key wrods exit, and I guess it should affect the front-end breeze to determine whether record A is saved, maybe that's the reason why when I try to save record B, controller still get record A. 它向我显示密钥已退出,我想它应该影响前端微风来确定是否保存记录A,也许这就是为什么当我尝试保存记录B时,控制器仍会获得记录A的原因。

My controller: 我的控制器:

[Produces("application/json")]
[Route("breeze/[controller]/[action]")]
[BreezeQueryFilter]

public class JumpstartController : Controller
{
    private readonly IUnitOfWork _uitOfWork;

    public JumpstartController(IUnitOfWork uitOfWork)
    {
        _uitOfWork = uitOfWork;
    }

    ......

    [HttpPost]
    [AllowAnonymous]
    public SaveResult SaveChanges([FromBody] JObject saveBundle)
    {
        return _uitOfWork.Commit(saveBundle);
    }

Unit of work: 工作单位:

readonly EFPersistenceManager<JumpstartEntities> _persistenceManager =
   new EFPersistenceManager<JumpstartEntities>();

   // private readonly JumpstartContextProvider _contextProvider;
    /// <summary>
    /// ctor
    /// </summary>
    public UnitOfWork()
    {
        TenantRepository = new Repository<Tenant>(_persistenceManager.Context);
    }

    /// <summary>
    /// Reporitories
    /// </summary>
    public IRepository<Tenant> TenantRepository { get; private set; }


    /// <summary>
    /// Get breeze Metadata
    /// </summary>
    /// <returns>String containing Breeze metadata</returns>
    public string Metadata()
    {
        return _persistenceManager.Metadata();
    }

    /// <summary>
    /// Save a changeset using Breeze
    /// </summary>
    /// <param name="changeSet"></param>
    /// <returns></returns>
    public SaveResult Commit(JObject changeSet)
    {
        return _persistenceManager.SaveChanges(changeSet);
    }

we need use JsonSerializationFns which from breeze to serialize the result, it will add the key words. 我们需要使用JsonSerializationFns,它可以轻而易举地序列化结果,它将添加关键字。

mvcBuilder.AddJsonOptions(opt => {
    var ss = JsonSerializationFns.UpdateWithDefaults(opt.SerializerSettings);
    var resolver = ss.ContractResolver;
    if (resolver != null) {
      var res = resolver as DefaultContractResolver;
      res.NamingStrategy = null;  // <<!-- this removes the camelcasing
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM