2017-07-14 10 views
1

私はBreezesharpでアプリケーションを実装しています。エンティティをEntityManagerに挿入するときに問題が発生しました。エラーは次のとおりです。BreezeSharp Attachプロパティキーが見つかりません

まだEntityTypeに定義されたKeyPropertiesはありません:「TransportReceipt:#1 Business.DomainModels」

は、私はすでに私の最初のエンティティタイプ「顧客」と、このエラーに直面し、ミスマッチを実装しますアプローチは、hereを示唆しています。その場合、私はWebApiに対する操作を成功させました。しかし今、私はアプリケーション内にTransportReceiptエンティティを作成しています。

マッピングの不一致の修正

public static class ExtendMap 
{ 
    private static bool? executed; 
    public static void Execute(MetadataStore metadataStore) { 
     if (ExtendMap.executed == true) 
     { 
      return; 
     } 

     var customerBuilder = new EntityTypeBuilder<Customer>(metadataStore); 
     customerBuilder.DataProperty(t => t.id).IsPartOfKey().IsAutoIncrementing(); 

     var transportReceiptBuilder = new EntityTypeBuilder<TransportReceipt>(metadataStore); 
     transportReceiptBuilder.DataProperty(t => t.id).IsPartOfKey().IsAutoIncrementing(); 

     var transportReceiptAttachmentBuilder = new EntityTypeBuilder<TransportReceiptAttachment>(metadataStore); 
     transportReceiptAttachmentBuilder.DataProperty(t => t.id).IsPartOfKey().IsAutoIncrementing(); 

     var uploadedFileBuilder = new EntityTypeBuilder<UploadedFile>(metadataStore); 
     uploadedFileBuilder.DataProperty(t => t.id).IsPartOfKey().IsAutoIncrementing(); 

     ExtendMap.executed = true; 
    } 
} 

マイベースのDataServiceコアコード

public abstract class SimpleBaseDataService 
{ 
    public static string Metadata { get; protected set; } 
    public static MetadataStore MetadataStore { get; protected set; } 
    public string EntityName { get; protected set; } 
    public string EntityResourceName { get; protected set; } 
    public EntityManager EntityManager { get; set; } 
    public string DefaultTargetMethod { get; protected set; } 

    static SimpleBaseDataService() 
    { 
     try 
     { 
      var metadata = GetMetadata(); 
      metadata.Wait(); 
      Metadata = metadata.Result; 

      MetadataStore = BuildMetadataStore(); 

     } 
     catch (Exception ex) 
     { 
      var b = 0; 
     } 
    } 


    public SimpleBaseDataService(Type entityType, string resourceName, string targetMethod = null) 
    { 
     var modelType = typeof(Customer); 
     Configuration.Instance.ProbeAssemblies(ConstantsFactory.BusinessAssembly); 
     try 
     { 
      this.EntityName = entityType.FullName; 
      this.EntityResourceName = resourceName; 

      this.DefaultTargetMethod = (string.IsNullOrWhiteSpace(targetMethod) ? "GetAllMobile" : targetMethod); 

      var dataService = new DataService($"{ConstantsFactory.Get.BreezeHostUrl}{this.EntityResourceName}", new CustomHttpClient()); 
      dataService.HasServerMetadata = false; 


      this.EntityManager = new EntityManager(dataService, SimpleBaseDataService.MetadataStore); 
      this.EntityManager.MetadataStore.AllowedMetadataMismatchTypes = MetadataMismatchTypes.AllAllowable; 
      // Attach an anonymous handler to the MetadataMismatch event 
      this.EntityManager.MetadataStore.MetadataMismatch += (s, e) => 
      { 
       // Log the mismatch 
       var message = string.Format("{0} : Type = {1}, Property = {2}, Allow = {3}", 
              e.MetadataMismatchType, e.StructuralTypeName, e.PropertyName, e.Allow); 

       // Disallow missing navigation properties on the TodoItem entity type 
       if (e.MetadataMismatchType == MetadataMismatchTypes.MissingCLRNavigationProperty && 
        e.StructuralTypeName.StartsWith("TodoItem")) 
       { 
        e.Allow = false; 
       } 
      }; 

     } 
     catch (Exception ex) 
     { 
      var b = 0; 
     } 
    } 
} 

これは私が新しいエンティティ

//DataService snippet 
public void AttachEntity(T entity) 
    { 
     this.EntityManager.AttachEntity(entity, EntityState.Added); 
    } 

//Business 
this.TransportReceipt = new TransportReceipt { id = Guid.NewGuid(), date = DateTime.Now, customerId = Customer.id/*, customer = this.Customer*/ }; 
      this.Attachments = new List<TransportReceiptAttachment>(); 
      this.TransportReceipt.attachments = this.Attachments; 
      TransportReceiptDataService.AttachEntity(this.TransportReceipt); 

私が追加しようと追加しようとしている者ですエンティティをEntityManagerに追加すると、すべてのエンティティクラスのカスタムマッピングが表示されます。 enter image description here

私の質問は私が間違っていることです。

答えて

0

それは変でした。

新しい偽intプロパティのマッピングを変更して動作します。私はすぐにセーブフロー全体をテストし、ここで結果を共有します。

更新

私が上に移動し、Breezesharpの除去を開始します。 Breezesharpプロジェクトは最新ではなく、Xamarinとの統合性はよくありません。私はあなたの経験に感謝します。

+0

問題は、Breezesharpパターンを使用せずにエンティティクラスを作成したためです。 GetValue、SetValue。 –

関連する問題