【问题标题】:saveChanges - Sequence contains no matching elementsaveChanges - 序列不包含匹配元素
【发布时间】:2013-08-11 04:39:42
【问题描述】:

我对微风.js 有点陌生,我认为这个想法很棒,但我有点卡在这里;每次我的微风控制器尝试保存它时,都会抛出一个“序列不包含匹配元素”,尽管 json 包含数据;我正在使用敲除将其绑定到引导模式,并且在触发 saveChanges 并抛出该错误之前,一切似乎都可以正常工作。 json 似乎是正确的(包含所有更改),我有点卡在这里;如果您需要一些代码,请告诉我

提前致谢 一月

编辑添加的代码:

控制器

 [BreezeController]
    public class BreezeEntityController : ApiController
    {

         readonly BreezeEntityRepo repository = new BreezeEntityRepo();

         [HttpGet]
         public IQueryable GetEtCustomers()
         {
             if (User.Identity.IsAuthenticated)
             {
                 Int32 idUser = WebSecurity.GetUserId(User.Identity.Name);
                 Int32 idSstuser = Helpers.Extensions.GetSstCustomerId(User.Identity.Name);
                 return repository.Customers.Cast<EtCustomer>().Where(o => (o.IdMain.HasValue && o.IdMain == idSstuser) || o.IdUser == idUser).AsQueryable();
             }

             return null;
         }

        [HttpGet]  
        public string Metadata()  
        { 
            return repository.Metadata();  
        }

        [HttpPost]
        public SaveResult SaveChanges(JObject saveBundle)
        {
            return repository.SaveChanges(saveBundle);
        }  

    }

我要保存的 json:

{
"entities": [{
    "IdSstCustomer": 12520,
    "IdAddressType": 40,
    "IdTitle": 10,
    "Lastname": "Lieferadresse",
    "Firstname": "Dummy",
    "Title": null,
    "Name": "Maximilian Jan",
    "Email": "test@test.at",
    "NLstop": null,
    "Phone": null,
    "Company": null,
    "UID": "",
    "Address": "Teststr 1",
    "Address2": null,
    "City": "Wien",
    "ZipCode": "1110",
    "State": null,
    "Country": "AT",
    "CreateDate": "2013-02-25T12:06:00Z",
    "CreateUser": 22,
    "UpdateDate": null,
    "UpdateUser": null,
    "ApplicationId": null,
    "UserId": null,
    "IdMain": 10080,
    "IdUser": null,
    "entityAspect": {
        "entityTypeName": "EtCustomer:#interfaceLibrary",
        "defaultResourceName": "tbl_sst_Customer",
        "entityState": "Modified",
        "originalValuesMap": {
            "Firstname": "Jan",
            "Lastname": "Maximilian Lieferadresse",
            "Address": "Wienerstraße 53a",
            "ZipCode": "4020",
            "City": "Linz",
            "Email": "test@test-vertrieb.at"
        },
        "autoGeneratedKey": {
            "propertyName": "IdSstCustomer",
            "autoGeneratedKeyType": "Identity"
        }
    }
}],
"saveOptions": {}

}

我的实体模型也在外部 dll 中;会是这个原因吗?

问候一月

编辑抱歉,这是最后一段代码,这是存储库:

 public class BreezeEntityRepo
    {
        readonly EFContextProvider<FaEntities> _contextProvider =
  new EFContextProvider<FaEntities>();

        public IQueryable<EtCustomer> Customers
        {
            get 
            {
                return _contextProvider.Context.tbl_sst_Customer; 
            }
        }

        public string Metadata()
        {
            return _contextProvider.Metadata();  
        }

        public SaveResult SaveChanges(JObject saveBundle)
        {
            return _contextProvider.SaveChanges(saveBundle);  
        }
    }
}

视图模型是

   var vm = {
        people: ko.observableArray([]),
        hide: ko.observable(true),
        save: saveChanges,
        newEtCustomer: ko.observable(
          {
              Title: "",
              Firstname: "",
              Lastname: "",
              Email: "",
              Address: "",
              City: "",
              ZipCode: "",
              Country: ""
          }),
        addEtCustomer: addNewEtCustomer,
        editEtCustomer: editEtCustomer
    };

然后保存被调用

   function editEtCustomer(customer) {
        vm.save();
    }

很难将数据正确提交回服务器端控制器

问候一月

编辑:

好的,堆栈跟踪是

  bei System.Linq.Enumerable.First[TSource](IEnumerable`1 source, Func`2 predicate)
   bei Breeze.WebApi.EFContextProvider`1.GetEntitySetName(Type entityType)
   bei Breeze.WebApi.EFContextProvider`1.ProcessSaves(Dictionary`2 saveMap)
   bei Breeze.WebApi.EFContextProvider`1.SaveChangesCore(SaveWorkState saveWorkState)
   bei Breeze.WebApi.ContextProvider.OpenAndSave(SaveWorkState saveWorkState)
   bei Breeze.WebApi.ContextProvider.SaveChanges(JObject saveBundle, TransactionSettings transactionSettings)
   bei WatShop.Models.Entity.BreezeEntityRepo.SaveChanges(JObject saveBundle) in c:\Projekte\ProjekteWeb\WatShop\WatShop\Models\Entity\BreezeEntityRepo.cs:Zeile 33.
   bei WatShop.Controllers.BreezeEntityController.SaveChanges(JObject saveBundle) in c:\Projekte\ProjekteWeb\WatShop\WatShop\Controllers\BreezeEntityController.cs:Zeile 44.
   bei lambda_method(Closure , Object , Object[] )
   bei System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass13.<GetExecutor>b__c(Object instance, Object[] methodParameters)
   bei System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
   bei System.Web.Http.Controllers.ReflectedHttpActionDescriptor.<>c__DisplayClass5.<ExecuteAsync>b__4()
   bei System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)

希望对你有帮助

问候一月

【问题讨论】:

  • 'Sequence contains no matching element' 似乎是 C# / .NET 问题,您确定您没有以某种方式拦截更改,或者您的控制器中的 saveChanges 方法是否正常运行?此外,如果没有任何代码示例,几乎不可能提供帮助。
  • 您好,我添加了控制器代码以及 JSON 如果您需要 knockout.js vm 告诉我然后我也添加它;在此先感谢 jan
  • 什么是repository.SaveChanges(saveBundle) ?????
  • +1 对 Slauma 的评论,您在存储库中有另一层,其中包含额外的逻辑。您需要显示的 SaveChanges。
  • 很抱歉,我添加了缺少的代码,感谢您的耐心等待

标签: c# asp.net-mvc knockout.js entity breeze


【解决方案1】:

我也有同样的问题。我正在使用 Entity Framework 4.0 生成的 EDMX 文件。

问题出在以下几行:

// Old EDMX ObjectContext has empty OSpace, so we get cspaceEntityType directly
var cspaceEntityTypes = metaWs.GetItems<EntityType>(DataSpace.CSpace);
cspaceEntityType = cspaceEntityTypes.First(et => et.FullName == entityType.FullName);

在我的例子中,et.FullName 包含 "MyModel.Customer" 等值,但 entityType.FullName 包含 "My.CSharp.Namespace.Customer"

所以看起来像是比较问题。一个快速(且肮脏)的解决方法是在 coparison 中仅使用部分而不是 FullName:

cspaceEntityType = cspaceEntityTypes.First(et => et.Name == entityType.Name); 

更新:如果您不想更改 BreezeJS 代码,请按照https://stackoverflow.com/a/18001434/174638 中的说明更改 EDMX 命名空间

【讨论】:

    【解决方案2】:

    我也有同样的错误。希望我能早点找到这篇文章,因为我必须包含 Breeze 源代码并调试和修复。

    我的解决方案是更改 EDMX 的命名空间。只要您不执行任何实体 SQL,就不会影响您现有的代码库。此外,您不必更改微风代码。

    将 EDMX 命名空间从“[EntityModelName]”更改为 C# 命名空间。

    Breeze 将完美运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多