gpt4 book ai didi

c# - 使用 DataContext.ExecuteQuery 时,LINQ to SQL 可以填充非 ColumnAttribute 标记的属性吗?

转载 作者:太空狗 更新时间:2023-10-29 20:38:05 25 4
gpt4 key购买 nike

给定这张表:

CREATE TABLE [Comments]
(
[Id] [int] IDENTITY(1, 1) NOT NULL,
[Text] [nvarchar](600) NOT NULL
)

有了这个模型类:

[Table(Name="Comments")]
public class Comment
{
[Column(AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]
public int Id { get; set; }

[Column(DbType = "NVarChar(600) NOT NULL", CanBeNull = false)]
public string Text { get; set; }

public string ArbitraryText { get; set; }
}

在使用ExecuteQuery 方法时,DataContext 是否可以填充ArbitraryText 属性:

var comments = db.ExecuteQuery<Comment>("select Id, [Text], 'hello' [ArbitraryText] from Comments");

实体映射算法似乎忽略了任何未标记为 ColumnAttribute 的属性,但是否有另一种方法可以做到这一点?

我宁愿不必自己做映射,但这看起来是我唯一的选择。


编辑:令人讨厌的是 DataContext.ExecuteQuery 函数将填充 POCO来自查询的对象:

public class PlainOldCSharpObject
{
public int Id { get; set; }
public string Text { get; set; }
public string ArbitraryText { get; set; }
}
...
// DataContext correctly fills these objects
var pocos = db.ExecuteQuery<PlainOldCSharpObject>("select Id, [Text]...

所以我目前的解决方案是在我的 LINQ 映射对象上有一个内部类,它保存我的聚合查询返回的额外数据。这是次优的,因为某些属性是重复的(例如,Id 和 Text)。

最佳答案

据我所知没有。您可能会做一些蹩脚的事情来结合来自 UDF 的数据,也许 - 但除此之外,它会希望能够映射列。

(其中 UDF 仅返回任意文本和评论 ID)

var qry = from row in db.SomeUdfQuery(someArgs)
join comment in db.Comments
on row.Id equals comment.Id
select new {Comment = comment, row.ArbitraryText};

var comments = new List<Comment>();
foreach(var record in qry) {
record.Comment.ArbitraryText = record.ArbitraryText;
comments.Add(record.Comment);
}
return comments;

或者 - 有一段时间我写了一个 few variants on ExecuteQuery如果您需要将这种方法用于许多不同的事情,这可能会有用...不过,就个人而言,我可能会先尝试回避这个问题。

关于c# - 使用 DataContext.ExecuteQuery 时,LINQ to SQL 可以填充非 ColumnAttribute 标记的属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/771491/

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