【发布时间】:2008-10-17 00:16:38
【问题描述】:
我正在处理一些表,我希望 C# 类具有与基础表列不同的属性名称。但是,当我使用 Translate 方法读取结果时,与源名称不匹配的属性永远不会被填充。即使我使用 Linq 生成 SQL。
例如,我的表在 DB 中是这样定义的:
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 属性和其他为简洁而省略的内容):
public partial class User
{
int UserId;
string Login;
string Active,
string Pwd
}
当我执行以下操作时,不会填充 Login 和 Pwd 属性,但会填充 UserId 和 Active 属性。
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();
!此时,我检查了用户对象,我可以看到 Login 和 Pwd 列没有填充!
这是生成的sql:
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'
最初,当 UserId 列具有不同的属性名称时,我得到了一个异常 The required column [UserId] does not exist in the results。我环顾四周,看到一些 MSFT 人员的回复说这是一个错误。
这有关系吗?它曾经修复过吗?有谁知道什么时候修复?
编辑:更多信息。
我认为与此相关的错误有 Kathy Lu MSFT 在 2007 年 8 月 14 日here 的评论,她说:
感谢您报告此问题。根据您的问题,我们能够重现该问题,并且产品团队正在研究适当的分类和解决方案。
我想知道这是否与我正在经历的事情有关,以及我是否可以获得更多信息。我搜索了linq translate site:connect.microsoft.com,但没有找到任何东西。
【问题讨论】:
-
这是 Visual Studio 2008 SP1 (.Net 3.5 SP1)
-
在 .Net 4.0 中似乎仍然是一个问题
-
Microsoft 停止开发它,这就是我停止使用 LinqToSql 转而使用 Dapper 的原因。
标签: c# .net sql-server linq-to-sql