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

21

我知道可以为每个属性添加数据注释来将其列类型设置为VARCHAR,但我有数百个要更改为VARCHAR而不是NVARCHAR的列,是否有一种设置EF6使其成为默认值的方法?

1个回答

33

查阅 EF 惯例,我认为你可以像这样做:

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

这大部分是从 http://msdn.microsoft.com/en-us/data/jj819164#order 抄袭来的,我没有测试过。

[编辑:] 如评论中 @Shimmy 指出的,还有 c => c.IsUnicode(false) 这个方法,它似乎可以做到相同的事情而不需要硬编码列类型。


2
看起来数据注释会优先生效,因为它们是更具体的设置(最具体的设置胜出)。 - Jimmy
6
@Jimmy,你的回答中的设置与 c.IsUnicode(false) 有什么区别? - Shimmy Weitzhandler
2
@Shimmy 看起来是这样的,可以在这个文件的920行看到:https://entityframework.codeplex.com/SourceControl/latest#src/EntityFramework.SqlServer/SqlProviderServices.cs - Jimmy
1
@Gertsen 这完全取决于你想要哪一个成为默认项。如果你想把默认设置为“varchar”,然后被迫使用“HasColumnType("nvarchar")”之类的方法,那么这就是一个主效应,它与当前状态完全相反;这里没有任何副作用! - ErikE
1
@SBFrancies - 实际上,据我所知,在EF Core中确实可以使用IsUnicode()方法。 我正在使用EF Core 2.0版本。 添加后运行迁移会将我的nvarchar列更改为varchar。 或者你是指没有IsFixedLength()方法来生成“char”列? - BioData41
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接