SQLite与SQLServer之间的实体框架核心数据类型转换差异

时间:2018-10-05 05:27:04

标签: entity-framework-core asp.net-core-2.0

我有一个 SQLite SQL Express 数据库,它们都有一个表,其列如下:

enter image description here

我的简化实体外观如下:

public class Customer
{
   public string BusinessIdentifier { get; set; }
}

例如,如果您发现我的实体上的数据库bigintstring之间的数据类型不同。

我已经使用Fluent API进行了映射,如下所示:

entity.Property(p => p.BusinessIdentifier).HasColumnName("CUSTOMER")

当我使用options.UseSqlite(connectionString);时,在 SQLite

正常工作。对于SQLite connectionString="Data Source=my_db.db"

但是,当我使用options.UseSqlServer(connectionString);使用 SQL Server Express 时,它开始给我有关类型不匹配的错误。

我必须在 Fluent API 上明确处理此转换,如下所示:

entity.Property(p => p.BusinessIdentifier).HasColumnName("CUSTOMER").HasConversion(v => Convert.ToInt64(v), v => v.ToString());

SQL Server connectionString="Data Source=my_machine\SQLEXPRESS;Initial Catalog=my_db;Integrated Security=True;"

问题

有人可以解释一下为什么这两种类型的数据库之间存在这种差异吗,真的需要在每种情况下都如此具体吗?

问候 基兰

1 个答案:

答案 0 :(得分:0)

SQLite不会强制使用数据类型约束,它允许您存储一个具有不同数据类型的值,因此这可能是您的代码与SQLite配合良好的原因,另一方面,SQL Server强制您执行以下操作:必须具有相同的数据类型。

您可以参考这份文档https://www.sqlite.org/datatype3.html