2013-08-09 3 views
1

저는 breeze.js에 다소 익숙하며 힘든 아이디어가 있었지만 여기에 조금 붙어 있습니다. 내 바람 컨트롤러가 저를 저장하려고 할 때마다 "시퀀스에 일치하는 요소가 없습니다"라고 표시됩니다. 부트 스트랩 모달에 바인딩하기 위해 녹아웃을 사용하고 있으며 saveChanges가 실행될 때까지 모든 것이 작동하는 것으로 보이며 그 오류를 throw합니다. json은 정확하고 (모든 변경 사항을 포함하고있는 것 같습니다), 나는 여기에 달라 붙었습니다. 당신이 몇 가지 코드를 필요로하는 경우 나saveChanges - 시퀀스에 일치하는 요소가 없습니다.

편집 코드를 추가 1월 사전에

감사를 알려 주시기 바랍니다 :

내가 저장하려고

[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": "[email protected]", 
    "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": "[email protected]" 
     }, 
     "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(); 
    } 

라고 :

는이 저장소입니다, 여기 미안 1월

편집 코드의 마지막 조각에 관하여

힘든 데이터가 올바르게 다시 서버 측 컨트롤러에

관련 1월

을 최선을 다하고

편집 :

좋아 스택 트레이스가이

을하는 데 도움이

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) 

희망은 일월

에 관하여
+1

'시퀀스에 일치하는 요소가 없습니다.'라는 C#/.NET 문제가있는 것 같습니다. 어떻게 든 변경 사항을 가로 채지 않았는지 또는 컨트롤러의 saveChanges 메서드가 제대로 작동하는지 확인 하시겠습니까? 또한, 코드 샘플 없이는 불가능한 옆에 있습니다. –

+0

안녕하세요, knockout.js VM이 필요하면 컨트롤러 코드와 JSON을 추가했습니다. 사전에 감사합니다 안부 일 – subkonstrukt

+1

그리고 무엇입니까'저장소입니다. SaveChanges (saveBundle)'????? Slauma 님의 의견에 +1 – Slauma

답변

1

동일한 문제가 있습니다. Entity Framework 4.0에서 생성 된 EDMX 파일을 사용하고 있습니다.

문제는 다음 줄에 : 같은 "MyModel.Customer" 같은 내 경우 et.FullName conatins 값에

// 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); 

하지만 entityType.FullName"My.CSharp.Namespace.Customer"가 포함되어 있습니다.

비교 문제와 비슷합니다.https://stackoverflow.com/a/18001434/174638

0

에 설명 된대로 BreezeJS 코드를 변경하지 않는 경우, EDMX 네임 스페이스를 변경합니다

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

UPDATE : 빠른 (더러운) 해결 방법은 coparison에 부분적으로 만,하지으로 FullName을 사용하는 것입니다 저도 같은 오류가있었습니다. Breeze 소스를 포함하고 디버그 및 수정해야하므로이 게시물을 더 빨리 찾을 수 있기를 바랍니다.

내 솔루션은 EDMX의 네임 스페이스를 변경하는 것이 었습니다. Entity SQL을 사용하지 않는 한 기존 코드베이스에는 영향을 미치지 않습니다. 또한 바람 코드를 변경할 필요가 없습니다.

"[EntityModelName]"에서 C# 네임 스페이스로 EDMX 네임 스페이스를 변경하십시오.

그러면 Breeze가 완벽하게 작동합니다.

관련 문제