将 EF6 配置为默认使用 varchar 而不是 nvarchar?

Posted

技术标签:

【中文标题】将 EF6 配置为默认使用 varchar 而不是 nvarchar?【英文标题】:Configure EF6 to use varchar as default instead of nvarchar? 【发布时间】:2014-01-24 13:25:40 【问题描述】:

我知道我可以为每个属性添加数据注释以将其列类型设置为 VARCHAR 但我有数百个列我想成为 VARCHAR 而不是 NVARCHAR 是否有某种方法可以设置 EF6这是默认的吗?

【问题讨论】:

【参考方案1】:

查找 EF 约定,我认为您可以这样做:

modelBuilder.Properties<string>().Configure(c => c.HasColumnType("varchar"));

我在很大程度上是从 http://msdn.microsoft.com/en-us/data/jj819164#order 中抄袭的,并且没有对其进行测试。

[编辑:] 正如 @Shimmy 在 cmets 中指出的那样,还有 c =&gt; c.IsUnicode(false) 似乎在没有硬编码列类型的情况下做同样的事情。

【讨论】:

你知道这是否会覆盖数据注释吗?我有一些注释可以将几列设置为CHAR 看起来数据注释将优先,因为它们是更具体的设置(最具体的胜利)。 @Jimmy,你回答中的设置和c.IsUnicode(false)有什么区别? @Shimmy,我的回答明确设置了列类型,而 IsUnicode 看起来像一个更流畅的 API 来描述意图。从技术上讲,IsUnicode 的实现可能会确定最合适的列类型,并且如果引入了新类型,或者考虑到不同版本的 SQL 中支持的不同类型(尽管在这种情况下我认为一切都支持 varchar/nvarchar),它也会随着时间的推移而发展. @Shimmy 看起来是这样,请参阅此文件中的第 920 行:entityframework.codeplex.com/SourceControl/latest#src/…

以上是关于将 EF6 配置为默认使用 varchar 而不是 nvarchar?的主要内容,如果未能解决你的问题,请参考以下文章

修改 EF的默认连接工厂为 Sql Server 而不是LocalDb

EF6 Dynamic Linq 将字符串转换为十进制

将 Visual Studio 2012 配置为使用 Mono 的 C# 编译器,而不是默认的 csc.exe

ROLLUP 函数;将 NULL 替换为 'Total' w/列数据类型 INT 而不是 VARCHAR

为啥我应该使用 char 而不是 varchar? [复制]

Hibernate:将字符串映射到 TEXT 而不是 VARCHAR