C# LINQ到SQL DataContext。转换名称与源名称不同的属性

C# LINQ到SQL DataContext。转换名称与源名称不同的属性,c#,.net,sql-server,linq-to-sql,C#,.net,Sql Server,Linq To Sql,我正在处理一些表,其中我希望C#类的属性名称与基础表列的属性名称不同。但是,当我使用Translate方法读取结果时,与源名称不匹配的属性永远不会被填充。即使我使用Linq生成SQL 例如,我的表在数据库中的定义如下: CREATE TABLE User_Entry ( UserId int IDENTITY (1, 1) NOT NULL, Login_Id varchar (50) NOT NULL, Active char(1) NOT NULL, PASS

我正在处理一些表,其中我希望C#类的属性名称与基础表列的属性名称不同。但是,当我使用Translate方法读取结果时,与源名称不匹配的属性永远不会被填充。即使我使用Linq生成SQL

例如,我的表在数据库中的定义如下:

CREATE TABLE User_Entry (
    UserId int IDENTITY (1, 1) NOT NULL,
    Login_Id varchar (50) NOT NULL,
    Active char(1) NOT NULL,
    PASSWORD varchar(75) NULL
)
下面是它映射到的类(由LINQ设计器生成…LINQ属性和其他为简洁起见遗漏的内容):

当我执行以下操作时,不会填充Login和Pwd属性,但会填充UserId和活动属性

Data.DbContext db = new Data.DbContext();

IQueryable query = db.Users.Where(usr => usr.Login == request.LoginString);

SqlCommand cmd = (SqlCommand)data.GetCommand(query);

... execute the command (asynchronously) ...

User user = db.Translate<User>( dataReaderResult ).FirstOrDefault();
最初,当UserId列具有不同的属性名时,我得到一个异常
,结果中不存在所需的列[UserId]。我环顾四周,看到一些微软的人回应说这是一个bug

这有关系吗?它被修好了吗?有人知道什么时候能修好吗

编辑:更多信息


我认为这与2007年8月14日Kathy Lu MSFT的评论有关,她在评论中说:

感谢您报告此问题。根据您的问题,我们能够重现问题,产品团队正在研究适当的分类和解决方案


我想知道这是否与我所经历的有关,以及我是否能得到更多关于它的信息。我搜索了linq translate网站:connect.microsoft.com,但没有找到任何内容。

列属性设置正确吗?有一个名称属性

还有。。。您希望被映射(如在第一个项目符号中)


将结果中的列与对象中的字段和属性匹配的算法如下所示:

  • 如果字段或属性映射到特定列名,则结果集中应包含该列名
  • 如果未映射字段或属性,则结果集中应有与字段或属性同名的列
  • 首先通过查找区分大小写的匹配来执行比较。如果未找到此匹配项,则会对不区分大小写的匹配项进行后续搜索


哦,等等,你在使用通用的翻译重载。使用Type参数尝试Translate重载,看看这是否对您有好处。

我认为与此相关的bug在2007年8月14日Kathy Lu MSFT发表评论,她说“感谢您报道这一问题。从您的问题中,我们能够重现该问题,产品团队正在研究适当的分类和解决方案。”


我想知道这是否与我所经历的有关,以及我是否能获得更多关于它的信息但是我什么也没找到。

谢谢你的回答。我检查了你提到的所有内容。我的列属性在设计器生成时设置正确。我还尝试了使用Translate(typeof(User),dataReaderResult)进行测试;但它也有同样的问题。请参阅添加到我文章中的其他信息,我认为这是相关的。Visual Studio 2008 SP1(.Net 3.5 SP1)在.Net 4.0Microsoft中似乎仍然是一个问题,Microsoft停止开发它,这就是为什么我停止使用LinqToSql而使用Dapper的原因。
Data.DbContext db = new Data.DbContext();

IQueryable query = db.Users.Where(usr => usr.Login == request.LoginString);

SqlCommand cmd = (SqlCommand)data.GetCommand(query);

... execute the command (asynchronously) ...

User user = db.Translate<User>( dataReaderResult ).FirstOrDefault();
exec sp_executesql N'SELECT [t0].[UserID] AS [UserId], [t0].[Login_ID] AS [Login], [t0].[Active], [t0].[PASSWORD] AS [Pwd]
FROM [dbo].[User_Entry] AS [t0]
WHERE [t0].[Login_ID] = @p0', N'@p0 varchar(13)', @p0 = 'test_user'