2

seitdem ich über Code-First las ich da draußen finden könnte ein Problem mit diesem sein (obwohl es ist nur eine Vorschau) Ich habe 2 Probleme mit EF4 CTP5 Mitteilung als Folowing:Entity Framework 4 (CTP 5) Gleichzeitigkeit

Wie es sagte "New Change Tracking API" aber es dose't Tracking-Änderungen i erraten. Im Vergleich mit LINQ to SQL ich ein Beispiel bringen, um zu sehen, was jede Methode reagieren:

LINQ to SQL:

Dim db2 As New LINQDataContext 
Dim db3 As New LINQDataContext 

db2.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change1" 
db3.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change2" 

db2.SubmitChanges() 
db3.SubmitChanges() 

EF 4 CTP5:

Dim db2 As New ProductContext 
Dim db3 As New ProductContext 

db2.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change1" 
db3.Product.FirstOrDefault(Function(m) m.ID = 100).Name = "Change2" 

db2.SaveChanges() 
db3.SaveChanges() 

Diese Codes sind nur anders in ihren Kontexten. In LINQ to SQL wird die zweite SubmitChanges eine Ausnahme von "Zeile nicht gefunden oder geändert"., aber in EF werden die Änderungen ignoriert und die Zeile wird zweimal geändert, was meiner Meinung nach schlecht ist, weil wir Parallelität berücksichtigen müssen, oder?

+0

Sie [Linq to SQL] sagen sollte (http://msdn.microsoft.com/en-us/library/bb386976.aspx). Es gibt andere Varianten von LINQ: [Linq to Entities] (http://msdn.microsoft.com/en-us/library/bb386964.aspx), die zufällig in EF sind, [Linq to XML] (http://msdn.microsoft.com/en-us/library/bb387098.aspx), ye olde [Linq zu Objekten] (http://msdn.microsoft.com/en-us/library/bb397919.aspx) und viele andere Geschmacksrichtungen . –

+0

Danke, ja du hast vollkommen recht damit, es war Mitternacht also war es nicht ganz meine Schuld;) – GtEx

+0

ich entferne meine zweite Frage und platziere sie hier: http://stackoverflow.com/questions/4690397/entity- framework-4-ctp-5-unwise-Abfragen im Vergleich mit linq-to-sql – GtEx

Antwort

9

Konzentrieren Sie sich auf Ihren ersten Vergleich, glaube ich, dass Sie in LINQ to SQL standardmäßig eine optimistische Parallelitätsüberprüfung aktiviert haben. In EF müssen Sie alle Eigenschaften explizit markieren, die auf Gleichzeitigkeit geprüft werden sollen. Da Sie das höchstwahrscheinlich nicht für die Name-Eigenschaft getan haben, ist es EF egal, ob jemand den Produktnamen in einem anderen Datenbankbefehl geändert hat.

Ich möchte auch darauf hinweisen, dass dies nicht unbedingt ein Code-First-Verhalten ist, aber es ist ein Verhalten in EF. Wenn Sie ein Entitätsdatenmodell erstellen, müssen Sie auch Eigenschaften für die Parallelitätsprüfung explizit markieren.

Wenn Sie die fließende API verwenden, suchen Sie nach IsConcurrencyToken als Attribut für eine Eigenschaft. Wenn Sie Annotation verwenden, werfen Sie einen Blick auf ConcurrencyCheckAttribute.

hth julie

Verwandte Themen