7 Stimmen

Kann LINQ to SQL bei Verwendung von DataContext.ExecuteQuery Eigenschaften füllen, die nicht mit ColumnAttribute markiert sind?

Angesichts dieser Tabelle:

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

Mit dieser Modellklasse:

[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; }
}

Ist es möglich, dass ein DataContext die ArbitraryText Eigenschaft bei Verwendung der ExecuteQuery Methode:

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

Es scheint, dass der Algorithmus der Entitätszuordnung jede Eigenschaft ignoriert, die nicht mit ColumnAttribute aber gibt es eine andere Möglichkeit, dies zu tun?

Ich würde es vorziehen, das Mapping nicht selbst machen zu müssen, aber das scheint meine einzige Option zu sein.


Bearbeiten: Was ärgerlich ist, ist, dass die DataContext.ExecuteQuery-Funktion eine POCO Objekt aus einer Abfrage:

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]...

So meine aktuelle Lösung ist eine innere Klasse auf meine LINQ-gemappte Objekt, das die zusätzlichen Daten meine aggregierte Abfrage zurückgibt hält. Dies ist suboptimal, da einige Eigenschaften dupliziert werden (z. B. Id und Text).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X