【问题标题】:Entity Framework Core Data Type Conversion differences between SQLite vs SQLServerSQLite 与 SQLServer 之间的实体框架核心数据类型转换差异
【发布时间】:2019-03-10 13:28:42
【问题描述】:

我有一个 SQLiteSQL Express 数据库,这两个数据库都有一个包含以下列的表:

我的简化实体如下所示:

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

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

我已经使用Fluent API 进行如下映射:

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

SQLite 上,当我使用 options.UseSqlite(connectionString); 时,这项工作就好了。对于 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;"

问题

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

问候 基兰

【问题讨论】:

  • 我认为您可以将[DataType(DataType.Text)] 与属性或类似属性一起使用
  • 但是它在 SQLite 中是如何工作的,它在任何一个数据库上的 EF 代码都是一样的,我想知道它是如何在一个数据库上工作但在另一个数据库上失败

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


【解决方案1】:

SQLite 不强制数据类型约束,它允许您存储不同数据类型的值,因此这可能是您的代码与 SQLite 正常工作的原因,另一方面,SQL Server 强制您必须具有相同的数据类型。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多