8
对于这个表:使用DataContext.ExecuteQuery时,LINQ to SQL是否可以填充非ColumnAttribute标记的属性?
CREATE TABLE [Comments]
(
[Id] [int] IDENTITY(1, 1) NOT NULL,
[Text] [nvarchar](600) NOT NULL
)
有了这个模型类:
var comments = db.ExecuteQuery<Comment>("select Id, [Text], 'hello' [ArbitraryText] from Comments");
它:
[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; }
}
是否有可能为一个DataContext使用ExecuteQuery
方法时填写ArbitraryText
财产似乎实体映射算法忽略任何未标记为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)。
这是一个非常好的主意!然而,我们非常努力地没有任何存储过程,因为维护它们是一个总PITA。它不是LINQ-only就是参数化的SQL(这里就是这种情况)。我只是不理解DataContext如何在没有System.Data.Linq.Mappings属性的对象上工作,但不能用于映射对象。谢谢你的回答! +1 – 2009-04-22 03:09:51