Laden...

[erledigt] EF - Entity Framework: Wie können die Entitätsfelder ihren Standardwert aus dem SQL-Se...

Erstellt von m.grauber vor 13 Jahren Letzter Beitrag vor 13 Jahren 8.292 Views
M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren
[erledigt] EF - Entity Framework: Wie können die Entitätsfelder ihren Standardwert aus dem SQL-Se...

Liebe Experten,

Ich komme nicht mehr weiter: Per Entity Framework soll ein Datensatz auf den SQL-Server eingefügt werden, was nur dann fehlerfrei klappt, wenn alle Felder tatsächlich mit Werten belegt werden. (In der Datenbank sind alle Felder "Not Null" und haben einen Standardwert hinterlegt)

Im Entitätsmodell kann auch für jedes Feld unter Standardwert jeweils ein Standardwert hinterlegt werden. Damit würde das Problem nicht mehr auftreten.

Im Entitätsmodell sind bei den Feldern die Eigenschaften "NULL zulassen" "=False" und "Standardwert" "=(Keine"). Ändert man "Standardwert" auf den Standardwert, klappts wie gesagt. - Wie kann man das automatisiert für alle Tabellen und alle Felder tun?

Leider möchte ich diese Information nicht manuell im Entitätsmodell eintragen, da ich das Entity-Modell nach Änderungen an den SQL-Server-Tabellen lösche und immer neu erzeuge. Nach jeder Erzeugung müsste ich somit hunderte von Standardwerte eintragen. 😜

Gibt es eine Einstellung beim Erstellen vom Entitätsmodell, die automatisch die Standardwerte vom SQL-Server übernimmt? Oder gibt es vielleicht eine Einstellung "Beim Speichern statt Null-Werten Standardwerte vom Server verwenden"?

SQL-Server 2000-2008
VS2010 C#, .NET 4

Danke!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren
EF - Entity Framework: Wie können die Entitätsfelder ihren Standardwert aus dem SQL-Server beziehen?

Hallo,

hat denn wirklich niemand eine Idee wie das geht?

Ich bin wirklich dankbar für jeden Tipp!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

2.891 Beiträge seit 2004
vor 13 Jahren

Sofern du die betroffenen Felder nie selbst setzt, kannst du die auf "computed" stellen. Dann wird beim Einfügen der Standardwert genommen. Allerdings kann man dann diese Properties nicht mehr selbst ändern - was ja sicher nicht gewollt ist.

Bei LINQ2SQL hat man übrigens das gleiche "Problem". Die m.E. korrekte/perfekte Lösung dafür wäre, dass schon im Konstruktor die Felder mit den Standardwerten gefüllt werden (und nicht erst beim Insert).
Allerdings habe ich mich noch nicht damit beschäftigt, wie man das bewerkstelligen könnte. 🙁

Gruß,
dN!3L

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren

Hallo dN!3L,

vielen Dank für die Antwort!

Die Felder sollen an anderen Programmstellen schon befüllt werden. (Kann man vielleicht mitteilen: Alles andere, was nicht explizit übergeben wurde = computed? oder gibt es in der Entität eine Möglichkeit wie "Entity.LoadDefaultValuesIfNull=true;" um die Defaultwerte zu laden?)

Im Konstruktor kann ich leider nicht die Standardwerte einsetzen, da ich ja den Desinger vom Entity Model genutzt habe, um die SQL-Tabellen als Entitäten darzustellen. Dort kann ich zwar sicher irgendwo in den Code gehen und die Standardwerte im Konstruktor manuell setzen. Das geht sogar im Designer:

Im Entitätsmodel kann ich die einzelnen Felder (Entitätstypen) mit einem Standardwert auch befüllen. Aber auch diese Änderungen gehen verloren, wenn ich das Entitätsmodell neu erzeuge.

Ich möchte aber bei Tabellenänderungen das Entity Model schnell neu aufbauen können: Alles markieren, löschen und dann neu erzeugen. Damit wären meine Änderungen überschrieben.

Vielleicht weiß jemand noch eine Lösung?

Danke

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

Bei LINQ2SQL hat man übrigens das gleiche "Problem".

Hier kann man die partial void OnCreated() ergänzen um mit den Standardwerten gefüllt zu werden.

Ob das beim EF auch geht weiß ich nicht.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

2.891 Beiträge seit 2004
vor 13 Jahren

Hier kann man die partial void OnCreated() ergänzen um mit den Standardwerten gefüllt zu werden.

Das Problem dabei ist (für mich) die Redundanz im .NET-Model und der Datenbank. In der DB sind die Standardwerte ja schon alle definiert (und können geändert werden). Im .NET-Model muss ich die Standardwerte noch einmal definieren und nachpflegen.

Ich habe da mal fix was zusammengehackt, was (auf den ersten Blick) für LINQ2SQL-Entitäten funktioniert. Bei einem Aufruf von...


using (DataContext dataContext = new TestDataContext())
{
	TestEntity testEntity = new TestEntity().SetDbDefaults(dataContext);
}

... werden dann die DB-Standardwerte in das Modelexemplar übertragen.
Damit würde ich dann die ganzen Entitätsklassen um eine Factorymethode ergänzen.

Code für die Erweiterungsmethode:


public static T SetDbDefaults<T>(this T result,DataContext dataContext)
{
	TableAttribute databaseAttribute = (TableAttribute)typeof(T).GetCustomAttributes(typeof(TableAttribute),true)[0];
	string tableName = databaseAttribute.Name;

	if (dataContext.Connection.State!=ConnectionState.Open)
		dataContext.Connection.Open(); // TODO irgendwann wieder zumachen

	DataTable columnSchemaTable = dataContext.Connection.GetSchema("Columns");

	foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
		if (propertyInfo.CanWrite)
		{
			ColumnAttribute columnAttribute = (ColumnAttribute)propertyInfo.GetCustomAttributes(typeof(ColumnAttribute),false).FirstOrDefault();
			string columnName = columnAttribute.Name ?? propertyInfo.Name;

			string sqlDefaultValue = columnSchemaTable.Rows.OfType<DataRow>().Single(dr => ((string)dr["TABLE_SCHEMA"]+"."+(string)dr["TABLE_NAME"])==tableName && (string)dr["COLUMN_NAME"]==columnName)["COLUMN_DEFAULT"] as string;
			if (!String.IsNullOrEmpty(sqlDefaultValue))
				using (IDbCommand dbCommand = dataContext.Connection.CreateCommand())
				{
					dbCommand.CommandText = "SELECT "+sqlDefaultValue;
					object value = dbCommand.ExecuteScalar();
					propertyInfo.SetValue(result,value,null);
				}
		}
	return result;
}

Gruß,
dN!3L

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo dN!3L,

die Redundanz im .NET-Model und der Datenbank.

Das Problem wird mit den Linq2Sql-Bordmitteln unverständlicherweise nicht gelöst, außer bei INT IDENTITY.

Das mit den Lesen der Tabellenattribute ist eine Möglichkeit oder man findet sich eben damit ab 😉

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren

Hallo Gü!

Danke für die Antwort! Ich habe es mit einer Extension Methode versucht zu lösen:


    public static class MyExtender
    {
        public static Kunde GetDefaultValues(this Kunde currentKunde)
        {
            currentKunde.ID=0;
            currentKunde.Name = "";
            // hier folgen alle weiteren Felder....
            return currentKunde;
        }
    }

   // Später auslösen:
  Kunde _kunde = new Kunde();
  Kunde.GetDefaultValues()       // .GetDefaultValues() wird leider nicht von Intellisense angeboten!?


Leider zeigt mir Intellisense später nicht Kunde.GetDefaultValues() als Möglichkeit an. Bei "partial void OnCreated()" weiß ich nicht, wie und wo ich es aufrufen sollte: Partial würde ich ja als "partial class Kunde" anlegen und dann mit "public override OnCreated()" überschreiben. Oder kann man mit Kunde.OnCreated()+= Code anhängen? Nur wo muss man das einbauen?

"oder man findet sich eben damit ab 😉" --> Wie verfahrt ihr, wenn nicht alle Felder gesetzt werden sollen? - In diesem Fall immer alle leeren Felder manuell setzen und bei Felderweiterungen in der Datenbank die neuen Felder ergänzen?

Vielen Dank!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

die partielle Methode OnCreated wir (bei Linq2Sql) vom Designer erstellt. Das partial dabei bedeutet dass der Code der Methode auf mehrere Dateien aufgeteilt werden kann. Sollte normalerweise nicht verwendet, aber für Designer-generierte Codes ist das praktisch. D.h. zB in eine eigenen Datei


partial claa MyDataContext
{
    partial void OnCreated()
    {
        this.Id = Guid.NewGuid();
    }
}

Wenn du dir den vom Designer erstellten Code anschaust siehst du dass im Ctor die OnCreated-Methode aufgerufen wird.

Leider zeigt mir Intellisense später nicht Kunde.GetDefaultValues()

Hast du den Namespace indem die Erweiterung definiert ist auch eingebunden? Sonst wüsste ich nicht wieso 😉

Wie verfahrt ihr, wenn nicht alle Felder gesetzt werden sollen?

Wenn nicht alle Felder gesetzt werden müssen setze ich nur das was unbedingt sein muss - wie oben im Beispiel gezeigt. Felder/Spalten die NULL zulassen brauchen nicht berücksichtigt werden. Außerdem sind auf OO-Seite des O/R-Mappings die Entitäten als "normale" Klassen vorhanden. D.h. über die partielle Klasse können Überladungen für den Ctor mit entsprechender Argumentübergabe erstellt werden.


partial class Product
{
    public Product(int productID, int manufacturerID, string name) : thsi()
    {
        this.ProductID = ....  // Eigenschaft und nicht die Felder verwenden
    }
}

Es kann auch in Betracht gezogen werden eine SPROC zu verwenden. Dieser werden die wesentlichen Daten übergeben und die DEFAULT-Werte werden auf DB-Seite hinzugefügt. Falls diese auch auf Client-Seite gebraucht werden kann eine Funktion verwendet werden, etc. etc.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren

Hallo dN!3L,

auch Dir vielen Dank! Da muss ich aber erst einmal durchsteigen: 8o

Dieser Ansatz, die Defaultwerte direkt aus dem SQL-Server auszulesen gefällt mir auch und ist zudem sehr bequem. Allerdings speichert er die Werte nicht im Modell, sondern muss sie im Programmablauf vorher abfragen.

Diese Funktion könnte man evtl. auch dazu benutzen, um die Standardwerte direkt in die EDMX-Datei einzutragen, nachdem man das EF-Modell neu aufgebaut hat. Funktionen (z.B. newid()) müssten manuell noch angepasst werden.

Ich werde mir beide Ansätze ansehen!

Grüße

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

der Ansatz von dN!3L finde ich auch nicht schlecht. Der könnte noch dahingehend ausgebaut werden dass mittels T4 automatisch eine partielle Klasse mit den entsprechenden Methode für die Default-Werte erstellt wird. Also sozusagen eine Erweiterung der Designer-Funktionalität.

Muss mal schauen ob ich dafür Zeit habe.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

bei Linq2Sql funktioniert im .net 4.0 auch die "Automatisch generierter Wert"-Eigenschaft im Designer bzw. das Column-Attribut mit IsDbGenerated = true. Also hat MS das noch gefixt.

Funktionieren tut das mittels OUTPUT-SQL-Statement (und dazu ist SQL Server 2008 notwendig?).

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

2.891 Beiträge seit 2004
vor 13 Jahren

Allerdings speichert er die Werte nicht im Modell, sondern muss sie im Programmablauf vorher abfragen.

Hm? Wie meinst du das?

bei Linq2Sql funktioniert im .net 4.0 auch die "Automatisch generierter Wert"-Eigenschaft im Designer bzw. das Column-Attribut mit IsDbGenerated = true

Naja, das Problem ist, dass der Wert nicht wirklich autogeneriert ist. Ich würde mal behaupten, dass der Wert des entsprechenden Properties gar nicht mit ins Update/Insert eingetragen wird.

Diese Funktion könnte man evtl. auch dazu benutzen, um die Standardwerte direkt in die EDMX-Datei einzutragen, nachdem man das EF-Modell neu aufgebaut hat. [...]
Der [Vorschlag von dN!3L] könnte noch dahingehend ausgebaut werden dass mittels T4 automatisch eine partielle Klasse mit den entsprechenden Methode für die Default-Werte erstellt wird. Also sozusagen eine Erweiterung der Designer-Funktionalität.

Unter Using T4 Templates to generate EF classes - system.data.objects dev guy - Site Home - MSDN Blogs gibt's ein T4-Template zum Erstellen der EF-Modelle.
Kann man im EF4 jetzt nicht auch total leicht die Codegenerierung durch/mit T4 beeinflussen?

Gruß,
dN!3L

2.891 Beiträge seit 2004
vor 13 Jahren

der Ansatz von dN!3L finde ich auch nicht schlecht.

Danke. 😃
Zur Sicherheit - vor allem @m.grauber - möchte ich aber noch einmal verdeutlichen, dass sich mein Codestück und der Großteil der getroffenen Aussagen auf LINQ2SQL bezieht. Manche Aussagen lassen sich auf das EF übertragen, da die Konzepte gleich sind, allerdings sollte sich mein Snippet nicht einfach auf EF-Entitäten übertragen. Das Vorgehen, bei EF-Modellen an den Tabellen- und Spaltennamen zu kommen, funktioniert dort ganz anders (bzw. für mich erstmal nicht so leicht, wie bei LINQ2SQL).

Besten Gruß,
dN!3L

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo dN!3L,

Naja, das Problem ist, dass der Wert nicht wirklich autogeneriert ist. Ich würde mal behaupten, dass der Wert des entsprechenden Properties gar nicht mit ins Update/Insert eingetragen wird.

Der englische Ausdruck IsDbGenerated ist hier passender als die deutsche Übersetzung "Automatisch generierter Wert". Diese suggeriert dass der Wert lokal generiert und im INSERT an die DB gesendet wird. Dem ist nicht so -> DbGenerated. Es wird auch oben schon geschrieben das OUTPUT-Statement in Verbindung mit INSERT verwendet um die DB-generierten Werte zurück zum Client zu senden und dort die Eigenschaften der Entität zu setzen.

Dann ich muss ich wohl auch darauf hinweisen dass sich meine Aussageben auf Linq2Sql beziehen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

2.891 Beiträge seit 2004
vor 13 Jahren

Der englische Ausdruck IsDbGenerated ist hier passender als die deutsche Übersetzung "Automatisch generierter Wert". Diese suggeriert dass der Wert lokal generiert und im INSERT an die DB gesendet wird. Dem ist nicht so -> DbGenerated

Da stimme ich (von Anfang an) mit dir überein. Das Problem ist nur, dass eben nur in bestimmten Fällen der von der DB generierte Wert benutzt werden soll (wenn das entsprechende Property des Model nicht geschrieben wurde bzw. seinen .NET-Standardwert besitzt).

Das gedankliche Problem ist halt, dass die DB-Standardwerte (beim Insert) für nicht angegebene Spaltenwerte benutzt werden und diese nicht benutzt werden, obwohl im .NET-Model die zugehörigen Properties auch nicht explitit(!) angeben wurden.
Allerdings ist es ja doch so, dass alle Properties implizit im Konstruktor gesetzt werden und somit das Verhalten von LINQ2SQL und dem EntityFramework somit ja "regelkonform" ist.

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren

Hallo dN!3L und Gfoidl,

Trotz Eurer beiden ausführlichen Postings und langem Versuchens verstehe es einfach nicht:

Ich möchte inzwischen nun den für mich leichtesten Ansatz verfolgen und dafür sorgen, sobald eine Entität erstellt wird, diese mit leeren Werten vorzubelegen:

In Model.Designer.cs ist im EF folgendes definiert:


public partial class MyEntities : ObjectContext
{
    public MyEntities() : base("name=MyEntities", "MyEntities")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }
...

"partial", also wäre die OnContextCreated() auch von außen erweiterbar. Nur bringt es mir nichts, beim ObjectContext etwas auszuführen, da ich hier nicht weiß, um welche Entität (z. B. Tabelle Kunde, Lager o. ä.) es sich handelt. Kann man das hier irgendwie abfragen?

Sonst steht in der Model.Designer.cs zwar das ObjectSet noch aufgeführt, aber das ist nicht partial und beschreibt auch nicht das Kunde-Objekt, sondern die entsprechende Kollektion.

Daher habe ich es folgendermaßen versucht:


   public partial class MyEntities
    {
        partial void OnContextCreated()
        {
            if (this.DefaultContainerName=="Kunde")  // klappt so leider nicht
            {
                this.Kunde.ID = 0;	// alle Werte setzen, um NULL zu vermeiden
	this.Kunde.Name = "";
                ...
            }
        }
    }

Sobald ich im Code:

Kunde _kunde = new Kunde();

aufrufe, soll der Teil, der in meiner "public partial class MyEntities" steht, dafür sorgen, dass z. B. ID=0 ist und Name="". In anderen Entitäten können die Felder anders heißen.

Vielen Dank!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

sind die Klassen für die Entitäge auch partielle? Gibts dort im Ctor eine partielle Methode?

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

2.891 Beiträge seit 2004
vor 13 Jahren

[...] dafür sorgen, dass z. B. ID=0 ist und Name="".

Verstehe ich dich richtig: ID ist im Model ein Nullable<int>, darf aber nicht null sein?
Du kannst doch das Property im Model auf "Nullable=false" setzen - dann ist es ein "normales" int und kann nie null werden.

Sobald ich im Code Kunde _kunde = new Kunde() aufrufe, soll [ein Teil] dafür sorgen [...]

Soweit ich (in meinen Testprojekt) gesehen habe, wird vom EF-Codegenerator kein Konstruktor erzeugt. Also kannst du das einfach in deiner partiellen Entitätsklasse machen:


public partial class  MyEntities
{
    public MyEntities()
    {
         // Initialisierung hier machen
    }
}

Gruß,
dN!3L

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren

Hallo gfoidl,

ja, Du hast recht, jetzt hab ichs gefunden:


    [EdmEntityTypeAttribute(NamespaceName="MyModel", Name="Kunde")]
    [Serializable()]
    [DataContractAttribute(IsReference=true)]
    public partial class Kunde : EntityObject
    {
       public static Kunde CreateKunde(...)
       {
          ...
       }
    ...
    }
  

sonst sind partielle Methoden nur noch direkt bei den einzelnen Feldern auffindbar:


        private global::System.String _Name;
        partial void OnName1Changing(global::System.String value);
        partial void OnName1Changed();

sonst leider nichts "partiales".

Grüße

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren

Hallo dN!3L!

Verstehe ich dich richtig: ID ist im Model ein Nullable<int>, darf aber nicht null sein?
Du kannst doch das Property im Model auf "Nullable=false" setzen - dann ist es ein "normales" int und kann nie null werden.

* In der Datenbank sind die Felder not null und ein Standardwert ist hinterlegt
* In der edmx-Datei kann man bei den Entinitätstypen für alle einzelnen "Felder" den Standardwert von "(Keine)" manuell auf einen Standardwert ändern. Da dort auch "Null zulassen" auf False steht, wäre es wie von mir gewünscht. Jedoch muss ich bei Tabellenänderungen die edmx-Datei neu aufbauen lassen und müsste jedes Mal hunderte von Feldern wieder manuell mit Standardwerten beglücken. Das will ich vermeiden. Der Typ im Modell ist nicht nullable, sondern z.B. Int32 oder String.


public partial class  MyEntities
{
    public MyEntities()
    {
         // Initialisierung hier machen
    }
}

Ich möchte doch nicht MyEntities, sondern z. B. die einzelnen Felder der Kunden-Entities, der Lager-Entities etc. beim Initialisieren automatisch mit Standardwerten belegen, die ich 1x irgendwo im Code (nicht aber in der edmx-Datei) definiere. Ich müsste daher meiner Ansicht nach etwas folgendes schreiben:


public partial class Kunde
{
    public Kunde()
    {
         ID=0;
         Name="";
    }
}

Nur das geht leider nicht.

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

2.891 Beiträge seit 2004
vor 13 Jahren

Jedoch muss ich bei Tabellenänderungen die edmx-Datei neu aufbauen lassen und müsste jedes Mal hunderte von Feldern wieder manuell mit Standardwerten beglücken.

OK, stimmt.

Ich müsste daher meiner Ansicht nach etwas folgendes schreiben: public partial class Kunde[...] Nur das geht leider nicht.

Warum soll das nicht gehen?

Gruß,
dN!3L

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren

Hallo dN!3L und gfoidl,

ich bedanke mich sehr für Eure große Geduld! Ja es funktioniert nun tatsächlich. Zuerst hatte er aus irgendeinem Grund die "Felder" in der manuell erzeugten Partial-Klasse immer unterstrichen und nicht erkannt. Nun klappt es!

Und hier könnte man auch den Code anbringen, die Standardwerte vom SQL-Server zu lesen.

Vielen Dank nochmals an Euch beide!

Grüße

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]