我有一个 SQLite 和 SQL Express 数据库,它们都有一个表,其列如下:
我的简化实体外观如下:
public class Customer
{
public string BusinessIdentifier { get; set; }
}
例如,如果您发现我的实体上的数据库bigint
与string
之间的数据类型不同。
我已经使用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;"
问题:
有人可以解释一下为什么这两种类型的数据库之间存在这种差异吗,真的需要在每种情况下都如此具体吗?
问候 基兰
答案 0 :(得分:0)
SQLite不会强制使用数据类型约束,它允许您存储一个具有不同数据类型的值,因此这可能是您的代码与SQLite配合良好的原因,另一方面,SQL Server强制您执行以下操作:必须具有相同的数据类型。
您可以参考这份文档https://www.sqlite.org/datatype3.html。