2017-02-24 17 views
0

私のプロジェクトでは、SQL ServerとMySqlでEntity Framework 6を​​使用しようとしています。EF6 with SQL ServerとMYSQL、データベースに不一致データ型あり

今私はISENABLEDという名前のデータベースに列があります。この列はSQL Serverではbool、MYSQLではChar(1)です。理想的にはMYSQLではBITにする必要がありますが、これは従来のデータベースであるためCharにこの列を使用します。

私はDBからEF6を使用してこのテーブルをフェッチしようとすると、コードではそのデータベースにマッピングされたboolプロパティを持っているため、SQL Serverの場合は成功しましたが、Mysqlの場合、ブールに変換されます。 Singh charはEF6で文字列に変換されます。ここで

は私のコードです:

プロパティは、データベース列のコードにマッピングされた:

public bool IsEnabled { get; set; } 

今、私はMySQLのためにしようとしなかった何をされています

private string IsCharBasedEnabled { get; set; } 
[NotMapped] 
public bool IsEnabled 
{ 
    get { return IsCharBasedEnabled == "0"; } 
    set { IsCharBasedEnabled = value ? "1" : "0"; } 
} 

私はデータベースにIsCharBasedEnabledをマッピングされました列のCharの列は、文字列としてマップされ、上記のようにboolに変換されます。

ただし、このソリューションはSQL Serverでは機能しません。

同じプロパティの両方のデータベースで動作するものはありますか?

私のMySQLデータベースのスキーマは変更できません。

ここで何をすればよいですか?

答えて

0

[OK]を私は解決策が見つかりました:3つのすべてのデータベースと

 private bool IsEnabled1 { get; set; } 

    private string IsCharBasedEnabled { get; set; } 


    [NotMapped] 
    public bool IsEnabled 
    { 
     get { return IsCharBasedEnabled == "True" || IsCharBasedEnabled == "Y" || IsEnabled1; } 
     set { 
      if (value.ToString() == "Y" || value.ToString() == "N") 
      { 
       IsCharBasedEnabled = value ? "Y" : "N"; 
      } 
      else if (value.ToString() == "True" || value.ToString() == "False") 
      { 
       IsCharBasedEnabled = value ? "True" : "False"; 
      } 
      else if(value) 
      { 
       IsEnabled1 = true; 
      } 
     } 
    } 

仕事は、OnModelCreating関数で動的にプロパティをマップします。私有財産を結合するための

コードは次のとおりです。SQL ServerのバインドIsEnabled1ためので

modelBuilder.Types().Configure(c => 
      { 
       var properties = c.ClrType.GetProperties(BindingFlags.NonPublic 
                 | BindingFlags.Instance) 
              .Where(p => p.Name == "IsEnabled1"); 
       foreach (var p in properties) 
        c.Property(p).HasColumnName("FeatureEnable").IsRequired(); 
      }); 

、MySQLとPostgresはISCHarBasedEnabledをバインドするため。

3つのデータベースすべてで問題なく動作しています。

関連する問題