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”)
。如果我明确告诉EntityFrameworkType=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));