C# 为什么EF 6.1.3坚持将字符串值生成为Unicode?

C# 为什么EF 6.1.3坚持将字符串值生成为Unicode?,c#,entity-framework,C#,Entity Framework,我定义了以下类: private class Entity { public int? Number { get; set; } [Column(TypeName = "VARCHAR")] [StringLength(50)] public string Type { get; set; } public int Id { get; set; } [Column(TypeName = "VARCHAR")] [StringLength(2

我定义了以下类:

private class Entity
{
    public int? Number { get; set; }
    [Column(TypeName = "VARCHAR")]
    [StringLength(50)]
    public string Type { get; set; }
    public int Id { get; set; }
    [Column(TypeName = "VARCHAR")]
    [StringLength(255)]
    public string Name { get; set; }
}
实体
不是数据库中存在的模型类,而是我想将输出映射到它,而不是匿名类型

public static class EntityTypeName
{
    public const string Dealer = "DEALER";
}
稍后,在我的代码中,我有以下实体框架查询:

IRepository<DealerMostCurrent> repoDealer = new Repository<DealerMostCurrent>(context);
IRepository<DealerContact> repoDealerContact = new Repository<DealerContact>(context);
IQueryable<Entity> dealerEntity;

dealerEntity = from dealerRow in repoDealer.GetAsQueryable(dealerWhere).AsNoTracking()
               join dealerContactRow in repoDealerContact.GetAsQueryable(dealerContactWhere).AsNoTracking() on dealerRow.Dealer_Number equals dealerContactRow.Dealer_Number
    group dealerRow by new 
    {
        dealerRow.Dealer_Number,
        dealerRow.Dealer_Id,
        dealerRow.Dealer_Name
    } into groupedDealers
    select new Entity()
    {
        Number = groupedDealers.Key.Dealer_Number,
        Type = EntityItem.EntityTypeName.Dealer,
        Id = groupedDealers.Key.Dealer_Id,
        Name = groupedDealers.Key.Dealer_Name
    };
EntityFramework似乎忽略了我的输出映射类上的
[Column(TypeName=“VARCHAR”)
。如果我明确告诉EntityFramework
Type=System.Data.Entity.DbFunctions.asununicode(EntityItem.EntityTypeName.Dealer)
那么一切都很好,字符串没有被转换为Unicode。我是不是遗漏了什么

此外,在我的
OnModelCreating
中,我认为执行以下操作将明确强制EntityFramework将所有字符串类型视为非Unicode

modelBuilder.Properties<string>().Configure(p => p.IsUnicode(false));
modelBuilder.Properties().Configure(p=>p.IsUnicode(false));

我遗漏或误解了谜题的哪一部分。我如何强制EntityFramework将所有.NET
String
类型视为非Unicode
?我宁愿不必检查所有代码并在设置常量字符串值的所有位置添加
System.Data.Entity.DbFunctions.asununicode

你在问什么?
N'Dealer'
只是你自己的代码在最后一次选择中添加的硬编码字符串,即
Type=EntityItem.EntityTypeName.Dealer
。如果有任何问题,它将使用
VARCHAR
而不是
NVARCHAR
,并使用联接而不是指定实体之间的关系。ef不会转换在这种情况下,任何东西.NET中的字符串都是Unicode。@PanagiotisKanavos我知道字符串在.NET中是Unicode的,但是在输出
实体
类上,我指定了
[Column(TypeName=“VARCHAR”)的属性
并另外指定了一个长度。我希望实体框架在select as
“DEALER”as[C1]
中生成值,而不是
N'DEALER'as[C1]
在select中。您的查询只返回一个硬编码的Unicode值。为什么它应该是
'DEALER'
而不是
N'DEALER'
?您指定了一个列映射,但这里没有涉及任何列,只是一个硬编码的字符串。这就是为什么我必须再次询问的原因。您只是询问还是有实际问题?实际上两者都是
“经销商”
N“经销商”
是错误的。最好不要将常量值发送到数据库,并在本地使用它来生成结果对象,因为该数据段与数据库的其余部分根本不相互作用。
modelBuilder.Properties<string>().Configure(p => p.IsUnicode(false));