2016-06-02 9 views
-1

Es scheint mir, dass fast standardmäßig alle Code-POCO's private Setter für ihren Primärschlüssel haben a.k.a. automatisch generierte ID.Entity Framework-Code ersten privaten Satz für Identitätsspalte

Gefällt mir - public int id {get; privates Set; }

Ist das eine falsche Annahme? Ich möchte nicht, dass meine API die Einstellung einer automatisch generierten Spalte erlaubt.

+0

Dies ist nur eine Meinung, die nur durch andere Meinungen beantwortet werden kann. Nicht gut für Stack Overflow. –

+0

Dies ist keine Meinung, sondern ein Teil des ersten Gerüsts des EF-Codes. Wie Sie unten in meinem Kommentar sehen können, hat dies bereits zu einem Problem in unserer Codebasis geführt, wo eine automatisch generierte ID nun vom Code und nicht in der Datenbank aktualisiert wird. –

+0

Sie fragen, * wie angegeben *, ist nur eine Meinung (der übrigens ich leicht zustimmen könnte). Es ist kein spezifisches Programmierproblem, das ist die Art von Frage, die zu SO gehört. –

Antwort

1

einen öffentlichen Setter Machen sollte kein Problem sein, da es unadvised ist auch diese POCO aussetzen außerhalb der Data Access-Objekt-Ebene ..

eine POCO mit Attributen einem spezifischen Rahmen verziert Machen oder sogar eine POCO, die offenbart Irgendeine Art von Information bezüglich des Speichers (Entity Relational Database, in diesem Fall) ist eine schlechte Praxis.

Sie können es in eine Schnittstelle einfügen und als Instanz dieser Schnittstelle zurückgeben. Auf diese Weise genießen Sie das Beste aus beiden Welten. Verfügbarmachen der Eigenschaften, die notwendig sind und erlauben, nur einen Teil von ihnen zu setzen.

In jedem Fall glaube ich nicht, dass EF die private Setter-Sache zu sehr mögen wird.

+1

EF kann private Setter in Ordnung behandeln. –

+0

Ok dann .. ich stehe richtig. @GertArnold –

+0

Interssing genug, was ich befürchtet hat, hat sich in unseren Code eingeschlichen. Dies ist in der POST der Organisationseinheit. Die ID hier ist eine Identität in der Datenbank - organisation.id = db.Organizations.Count()> 0? db.Organizations.Max (x => x.id) + 1: 0; –