我定义了以下类:
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; }
}
Entity
不是数据库中存在的Model类,而是我想将输出映射到它而不是匿名类型。
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
};
如果我查看为EF调用生成的SQL,我会看到实体框架正在转换我的EntityItem.EntityTypeName.Dealer
常量,该常量被定义为String
到N'DEALER' AS [C1]
,
SELECT
[Distinct1].[Dealer_Id] AS [Dealer_Id],
[Distinct1].[Dealer_Number] AS [Dealer_Number],
N'DEALER' AS [C1],
[Distinct1].[Dealer_Name] AS [Dealer_Name]
FROM ( SELECT DISTINCT
[Extent1].[Dealer_Id] AS [Dealer_Id],
[Extent1].[Dealer_Number] AS [Dealer_Number],
[Extent1].[Dealer_Name] AS [Dealer_Name]
FROM [dbo].[DealerMostCurrent] AS [Extent1]
INNER JOIN [dbo].[DealerContact] AS [Extent2] ON [Extent1].[Dealer_Number] = [Extent2].[Dealer_Number]
WHERE ([Extent1].[Dealer_Id] > 0) AND ([Extent2].[Contact_Id] IN (1473,1475,1477,1481))
) AS [Distinct1]
似乎EntityFramework忽略了我的输出映射类中的[Column(TypeName = "VARCHAR")
。如果我明确告诉实体框架Type = System.Data.Entity.DbFunctions.AsNonUnicode(EntityItem.EntityTypeName.Dealer)
那么一切都很好,字符串不是对Unicode的类型转换。我在这里错过了什么吗?
此外,在我的OnModelCreating
中,我认为执行以下操作会明确强制EntityFramework将所有字符串类型视为非Unicode。
modelBuilder.Properties<string>().Configure(p => p.IsUnicode(false));
我错过了哪些难题或误解。 如何强制EntityFramework将所有.NET String
类型视为非Unicode ?我宁愿不必查看我的所有代码,并在我设置常量字符串值的所有位置添加System.Data.Entity.DbFunctions.AsNonUnicode
。