Nehmen wir an, ich habe ein Geschäftsobjekt mit 5 Eigenschaften und einem Sproc, der 4 Spalten mit Namen zurückgibt, die 4 dieser Eigenschaften entsprechen. Der Aufruf von ExecuteSprocAccessor schlägt fehl. Gibt es eine Möglichkeit, die fünfte Eigenschaft mit einem Attribut zu kennzeichnen, zB um EntLib anzuweisen, es zu ignorieren?Kann ich EntLib anweisen, eine Eigenschaft in meinem Geschäftsobjekt beim Aufruf von ExecuteSprocAccessor zu ignorieren?
0
A
Antwort
1
Sie können dies tun, wenn Sie den Mapper erstellen. Im Grunde so etwas wie dieses:
var results = db.ExecuteSprocAccessor("some_sproc",
MapBuilder<MyTargetType>.MapAllProperties()
.DoNotMap("SomethingThatDoesntMatch")
.Build(),
param1, param2, param3);
Das wird alle Parameter nach Name übereinstimmen, aber nicht alles auf die Eigenschaft SomethingThatDoesntMatch abzubilden.
Etwas zu beachten: Erstellen des Resultset Mapper durch den MapBuilder ist ziemlich teuer, und es wird nicht automatisch zwischengespeichert. Wenn Sie diesen Aufruf in einer Schleife ausführen, wird es wahrscheinlich langsam sein. Ich würde empfehlen, den Mapper vorab zu erstellen und festzuhalten oder den Accessor separat zu erstellen und den Accessor beizubehalten.
Momentan benutze ich nicht einmal einen Mapper. Ich baue meine Objekte nur vorsichtig auf, damit sie mit den Spalten übereinstimmen, die meine Sprocs zurückgeben. Es ist extrem sauber und funktioniert in den meisten Fällen. Ich hatte gehofft, ich könnte einfach die Eigenschaften dekorieren, die ich nicht mit einem Attribut verknüpfen möchte. Naja. Im Moment durchlaufe ich eine Schleife in meiner Logikschicht und kopiere die Objekte - Parameter für Parameter -, die ich vom Sproc-Accessor zurückerhalte, in eine Liste von Objekten, die die wenigen anderen Parameter enthalten, die ich brauche. Wenn ich Leistungsprobleme habe, werde ich beide Methoden testen und die schnellere verwenden. Vielen Dank!!! – birdus
Nun, Sie verwenden einen Mapper, es wird nur implizit für Sie erstellt. Ja, in diesem Fall musst du explizit eines erstellen. Wir haben sehr bewusst die Dinge einfach gehalten; wir wollten es nur einfacher machen, Datenbankergebnisse zu konsumieren, nicht versehentlich ein ORM-Tool zu erstellen. –
Ah. Du bist im EntLib-Team. Cool. Ja, eine Liste von Objekten von meinen Sprocs zurück zu bekommen, ist super glatt. Ich mag es wirklich. Danke für Ihre Hilfe. – birdus