带有 SQL 服务器和 MYSQL 的 EF6,数据库中的数据类型不匹配

EF6 with SQL Server and MYSQL, with mismatch datatype in database

在我的项目中,我尝试将 Entity Framework 6 与 SQL 服务器和 MySql 一起使用。

现在我在数据库中有一个名为 ISENABLED 的列,现在这个列在 SQL 服务器中是 bool,在 MYSQL 中是 Char(1),理想情况下它应该是 BIT MYSQL 但由于这是遗留数据库,因此它对此列使用 Char。

现在每当我尝试使用 EF6 从数据库中获取此 table 时,在 SQL 服务器的情况下我都会成功,因为在代码中我有一个 bool 属性 映射该数据库但对于 Mysql 它会抛出一个错误,指出字符串无法转换为 bool。 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映射到数据库列,MySQL的Char列映射为字符串,然后转换为bool,如上所示。

但此解决方案不适用于 SQL 服务器。

我可以拥有对两个数据库都适用的相同 属性 的东西吗?

我无法更改 MySQL 数据库的架构。

我应该在这里做什么?

好的,我找到了解决方案:

     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 函数中动态映射 属性。

绑定私有 属性 的代码是:

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();
            });

所以 Sql 服务器绑定 IsEnabled1,MySQL 和 postgres 绑定 ISCHarBasedEnabled。

所有三个数据库都工作正常。