CREATE TABLE [Comments]
(
[Id] [int] IDENTITY(1, 1) NOT NULL,
[Text] [nvarchar](600) NOT NULL
)
Với lớp mô hình này:
[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; }
}
Có thể cho một DataContext để lấp đầy ArbitraryText
tài sản khi sử dụng ExecuteQuery
phương pháp:
var comments = db.ExecuteQuery<Comment>("select Id, [Text], 'hello' [ArbitraryText] from Comments");
Nó có vẻ như thuật toán ánh xạ thực thể bỏ qua bất kỳ thuộc tính nào không được đánh dấu bằng ColumnAttribute
, nhưng có cách khác làm điều này?
Tôi không muốn tự mình vẽ bản đồ, nhưng điều này có vẻ như là lựa chọn duy nhất của tôi.
Edit: Có gì khó chịu là chức năng DataContext.ExecuteQuery sẽ điền vào một đối tượng POCO từ một truy vấn:
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]...
Vì vậy, giải pháp hiện tại của tôi là phải có một lớp bên trên đối tượng LINQ-ánh xạ của tôi rằng giữ dữ liệu bổ sung mà truy vấn tổng hợp của tôi trả về. Điều này là phụ tối ưu, vì một số thuộc tính được nhân bản (ví dụ, Id và Văn bản).
Đây là một ý tưởng rất hay! Tuy nhiên, chúng tôi cố gắng hết sức để không có bất kỳ procs được lưu trữ nào, vì việc duy trì chúng là tổng PITA. Đó là chỉ LINQ hoặc SQL được tham số hóa (như trường hợp ở đây). Tôi chỉ không hiểu cách DataContext hoạt động như mong đợi trên các đối tượng không có thuộc tính System.Data.Linq.Mappings, nhưng không cho các đối tượng được ánh xạ. Cảm ơn vì đã trả lời! +1 –