将 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 => 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
将 Visual Studio 2012 配置为使用 Mono 的 C# 编译器,而不是默认的 csc.exe
ROLLUP 函数;将 NULL 替换为 'Total' w/列数据类型 INT 而不是 VARCHAR