Dato questa tabella:LINQ to SQL può riempire proprietà non-ColumnAttribute con contrassegno quando si utilizza DataContext.ExecuteQuery?
CREATE TABLE [Comments]
(
[Id] [int] IDENTITY(1, 1) NOT NULL,
[Text] [nvarchar](600) NOT NULL
)
Con questo modello di classe:
[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; }
}
E 'possibile per un DataContext per riempire la proprietà ArbitraryText
quando si utilizza il metodo ExecuteQuery
:
var comments = db.ExecuteQuery<Comment>("select Id, [Text], 'hello' [ArbitraryText] from Comments");
E' sembra che l'algoritmo di mappatura delle entità ignori qualsiasi proprietà non contrassegnata con ColumnAttribute
, ma esiste un altro modo di facendo questo?
Preferirei non dover eseguire la mappatura da solo, ma questa sembra la mia unica opzione.
Edit: Che cosa è fastidiosa è che la funzione DataContext.ExecuteQuery riempirà un oggetto POCO da una query:
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]...
Quindi la mia soluzione attuale è quella di avere una classe interna sul mio oggetto LINQ-mapped che detiene i dati aggiuntivi restituiti dalla mia query aggregata. Questo è non ottimale, poiché alcune proprietà sono duplicate (ad esempio, Id e Testo).
Questa è una buona idea! Tuttavia, ci sforziamo molto per non avere alcun proc memorizzato, poiché il loro mantenimento è un totale PITA. È solo SQL LINQ o parametrizzato (come nel caso qui). Sto solo non capendo come DataContext funzioni come previsto su oggetti che non hanno attributi System.Data.Linq.Mappings, ma non per oggetti mappati. Grazie per aver risposto! +1 –