繁体   English   中英

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

[英]EF6 with SQL Server and MYSQL, with mismatch datatype in database

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

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

现在,每当我尝试使用EF6从数据库中获取该表时,在SQL Server的情况下,我都会获得成功的结果,因为在代码中,我为该数据库映射了一个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 Server。

我可以为某些具有相同属性的数据库工作吗?

我无法更改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 Function中动态映射属性。

绑定私有财产的代码是:

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 Server绑定IsEnabled1,对于MySQL和postgres绑定ISCHarBasedEnabled。

对于所有三个数据库,它都运行良好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM