2016-12-19 5 views
1

Ich habe eine Datenbank und eine Reihe von Tabellen, die bereits Daten enthalten. Ich verwende Code zuerst. Nun wurde ich gebeten, der Datenbank eine Kategorie Tabelle hinzuzufügen und damit einige der anderen Tabellen so zu ändern, dass sie über einen Fremdschlüssel auf diese Tabelle verweisen. Ich weiß durch vorherige Erfahrung, dass, wenn ich die Datenbank nach dem Ändern der Modelle aktualisieren, wird es stöhnen, weil ein FK nicht 0 haben kann. Seed Methode, um tatsächlich die Fremdschlüssel als die Datenbank zu aktualisieren ist aktualisiert.EntityFramework aktualisieren vorhandene Datensätze mit neuen Fremdschlüssel

Ich möchte so etwas tun:

protected override void Seed(DatabaseContext context) 
{ 

    // Create our categories 
    context.Categories.AddOrUpdate(m => m.Id, 
     new Category { Id = 1, Name = "Cameras" }, 
     new Category { Id = 2, Name = "Televisions" } 
    ); 

    // Get all our current feeds 
    var feeds = context.Feeds.ToList(); 
    context.Feeds.AddOrUpdate(m => m.Id, feeds.Select(m => m.CategoryId = 1).ToArray()); 
} 

Kann mir jemand mitteilen, wie ich könnte dies tatsächlich tun? Oder wenn es einen anderen Weg gibt, es zu tun?

+0

context.Feeds.ForEach (f => f.CategoryId = 1); –

+1

@SteveGreene, 'Foreach' ist eine Methode von' List ', es wäre \t ' context.Feeds.ToList(). ForEach (f => f.CategoryId = 1); ' – octavioccl

+0

Sie können eine Null FK haben auch, wenn Sie keine CategoryId für alles brauchen. Null ist für einen FK gültig, wenn Sie dies im Design der Tabelle zulassen. –

Antwort

1

innerhalb einer Schleife:

foreach(var f in context.Feeds) 
{ 
    f.CategoryId=1; 
} 
context.SaveChanges(); 

Oder Entity Framework Extended library verwendet es in einer Charge zu tun:

context.Feeds.Update(f=>new Feed{CategoryId=1}); 
Verwandte Themen