2017-10-23 6 views
1

ThirdPartyモデルには、プロパティCertificateが含まれています。ソースコード用のデータ型はX509Certificate2ですが、EFCoreはそれをサポートしていないため、EFCoreデータベースストレージの場合はBase64 stringに変換する必要があります。次に、EFCoreデータベースから読み取るときにX509Certificate2に変換し直します。CodeFirstのプロパティをEFCoreのBase64文字列に保存しますが、EFCoreからX509Certificate2を読み込みますか?

どのようにプロパティマッパーでも自動的にこれを行うようにEFCoreに指示しますか?

public class ThirdParty 
{ 
    public Guid ThirdPartyId { get; set; } 
    public X509Certificate2 Certificate { get; set; } 
    public string RawData { get; set; } 
    public DateTime CreatedDate { get; set; } 
} 

var certificate1 = new X509Certificate(); 
var thirdParty = new ThirdParty() { Certificate = certificate } 
var certificate2 = thirdParty.Certificate; 

答えて

1

一つのアプローチは、データベースから読み取られたBase64stringの外に作成されますX509Certificate2オブジェクトを返します追加マップされていないプロパティを追加することです。 CertificateStringプロパティはデータコンテキストの保存と読み取りにのみ使用され、Certificateプロパティは他のロジックでの使用に使用されます。あなたが流暢APIでのデータ注釈や.Ignore(p => p.PropertyName)として[NotMapped]使用することができますプロパティをマッピングしないように

public class ThirdParty 
{ 
    private X509Certificate2 _certificate; 



    public Guid ThirdPartyId { get; set; } 

    // to write in data context only - only set it in production code 
    public string CertificateString 
    { 
     get 
     { 
      // return the Base64 string - is just pseudo code 
      return _certificate?.ToString(); 
     }  
     set 
     { 
      _certificate = new X509Certificate2(value); 
     } 
    } 

    // not mapped for data context - to read from data context only - only read fro 
    public X509Certificate2 Certificate 
    { 
     get 
     { 
      if (string.IsNullOrWhiteSpace(CertificateString)) 
      { 
       return default(X509Certificate2); 
      } 

      return new X509Certificate2(CertificateString); 
     }  
     private set 
     { 
      // will be set by CertificateString 
     } 
    } 

    public string RawData { get; set; } 

    public DateTime CreatedDate { get; set; } 
} 

+0

私は一番下に3行を追加して上記の投稿を更新しました。私はそれを他の方法でやっても動作させる方法を見つけ出そうとしましたが、動作させることができませんでした。 : -/ – fletchsod

+0

例外はありますか? – ChW

+0

スクラッチ。私が 'new X509Certificate2()'を実行すると、問題が見つかりました。デバッガは変な動作をします。私はあなたの答えをとにかく受け入れます。 – fletchsod

関連する問題