gpt4 book ai didi

c# - LINQ to SQL DataContext.Translate 和名称与源名称不同的属性

转载 作者:太空狗 更新时间:2023-10-29 21:56:09 24 4
gpt4 key购买 nike

我正在处理一些表,我希望 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 属性和其他为简洁起见省略的内容):

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();

!此时,我检查用户对象,我可以看到没有填充登录和密码列!

这是生成的 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 列具有不同的属性名称时,我得到了一个异常结果中不存在所需的列 [UserId]。我环顾四周,看到一些 MSFT 人员的回复说这是一个错误。

这有关系吗?它曾经被修复过吗?有谁知道什么时候修复?

编辑:更多信息。

我认为与此相关的错误来自 Kathy Lu MSFT 于 2007 年 8 月 14 日发表的评论 here ,她说:

Thank you for reporting this issue. From your issue we were able reproduce the issue and the product team is looking into an appropriate triage and resolution.

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

最佳答案

列属性是否设置正确?有一个名称属性。

http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.columnattribute_members.aspx

此外,Translate's documentation ...你想被映射(如第一个要点)。


将结果中的列与对象中的字段和属性进行匹配的算法的工作原理如下:

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

哦等等,您正在使用通用的翻译重载。使用 Type 参数尝试 Translate 重载,看看它是否对您更好。

关于c# - LINQ to SQL DataContext.Translate 和名称与源名称不同的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/210724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com