Entity Framwork und berechnete Spalten in einer DB-Tabelle

25/07/2009 - 15:02 von Carsten Ilwig | Report spam
Hallo Leute,

ich habe folgende Tabelle mit einer berechneten Spalte "ComboColumn" in
meiner DB:

CREATE TABLE [dbo].[ErweiterterStatus](
[Bezeichnung] [varchar](50) NOT NULL DEFAULT (''),
[Nummer] [varchar](2) NOT NULL DEFAULT (''),
[ComboColumn] AS (((([bezeichnung]+'(')+case when len([nummer])=(1) then
'0' else '' end)+[nummer])+')'),
) ON [PRIMARY]

Wenn ich nun ein neues ADO.NET Entity Data Model für diese Tabelle erstellen
lasse,
wird die berechnete Spalte "ComboColumn" als ganz "normale" Spalte definiert
mit
einem öffentlichen Getter und Setter:

[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(IsNullable=false)]
[global::System.Runtime.Serialization.DataMemberAttribute()]
public string ComboColumn
{
get
{
return this._ComboColumn;
}
set
{
this.OnComboColumnChanging(value);
this.ReportPropertyChanging("ComboColumn");
this._ComboColumn =
global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value,
false);
this.ReportPropertyChanged("ComboColumn");
this.OnComboColumnChanged();
}
}
private string _ComboColumn;
partial void OnComboColumnChanging(string value);
partial void OnComboColumnChanged();

In der CreateMyTable(...)-Methode wird sie sogar als Pflichtparameter mit
angegeben,
sodass man diesen Wert beim Anlegen eines neuen Objectes manuell übergeben
müsste:

/// <summary>
/// Erstellt ein neues ErweiterterStatus-Objekt.
/// </summary>
/// <param name="bezeichnung">Anfangswert von Bezeichnung.</param>
/// <param name="nummer">Anfangswert von Nummer.</param>
/// <param name="comboColumn">Anfangswert von ComboColumn.</param>
public static ErweiterterStatus CreateErweiterterStatus(string
bezeichnung, string nummer, string comboColumn)
{
ErweiterterStatus erweiterterStatus = new ErweiterterStatus();
erweiterterStatus.Bezeichnung = bezeichnung;
erweiterterStatus.Nummer = nummer;
erweiterterStatus.ComboColumn = comboColumn;
return erweiterterStatus;
}

Das Ganze ist nun so aber ziemlicher Unsinn, da der Wert dieser Spalte ja in
der DB automatisch ermittelt wird und
so eine Änderung bei einer der zur Berechnung verwendeteten Spalten die
berechnete Spalte auch erst nach einem DB-Update
und anschließendem Neuladen der Daten zur Verfüguing stünde.
Kann das EF mit berechneten Spalten nicht umgehen,
oder muss ich beim Verwenden/Erstellen von berechneten Spalten noch
irgendetwas anderes beachten/einstellen?

Vielen Dank für Eure Hilfe
Carsten
 

Lesen sie die antworten

#1 Elmar Boye
25/07/2009 - 16:43 | Warnen spam
Hallo Carsten,

"Carsten Ilwig" schrieb ...
ich habe folgende Tabelle mit einer berechneten Spalte "ComboColumn" in meiner DB:



Das Entity Framework unterstützt derzeit keine berechneten Spalten
als ReadOnly:
http://social.msdn.microsoft.com/Fo...4c386522cb

angedacht ist wohl etwas:
http://blogs.msdn.com/efdesign/arch...pager.aspx

Gruß Elmar

(Ich benutze EF nicht, weil es IMHO unvollstàndig ist).

Ähnliche fragen