Entity Framework - Update-Beziehung, indem Sie Fremdschlüssel

Habe ich die beiden folgenden Modelle und DbContext:

    public class TestDbContext : DbContext
    {
        public IDbSet<Person> People { get; set; }
        public IDbSet<Car> Cars { get; set; }
    }

    public class Person
    {
        public Person()
        {
            ID = Guid.NewGuid();
        }

        public Guid ID { get; set; }
        public string Name { get; set; }
        public virtual List<Car> Cars { get; set; }
    }

    public class Car
    {
        public Car()
        {
           ID = Guid.NewGuid();
        }

        public Guid ID { get; set; }
        public string Name { get; set; }
        public virtual Person Owner { get; set; }
    }

Ich dann deklarieren Sie eine Liste von Menschen und eine Liste der Autos, die Einstellung der Besitzer das erste Auto, die erste person in der Liste:

List<Person> People = new List<Person>()
        {
            new Person() {Name = "bill", ID = new Guid("6F39CC2B-1A09-4E27-B803-1304AFDB23E3")},
            new Person() {Name = "ben", ID = new Guid("3EAE0303-39D9-4FD9-AF39-EC6DC73F630B")}
        };

        List<Car> Cars = new List<Car>() { new Car() { Name = "Ford", Owner = People[0], ID = new Guid("625FAB6B-1D56-4F57-8C98-F9346F1BBBE4") } };   

Ich diese aus der Datenbank mit dem folgenden code und dieser funktioniert einwandfrei.

using (TestDbContext context = new TestDbContext())
        {
            foreach (Person person in People)
            {
                if (!(context.People.Any(p => p.ID == person.ID)))
                    context.People.Add(person);
                else
                {
                    context.People.Attach(person);
                    context.Entry<Person>(person).State = System.Data.EntityState.Modified;
                }
            }
            foreach (Car caar in Cars)
            {
                if (!(context.Cars.Any(c => c.ID == caar.ID)))
                    context.Cars.Add(caar);
                else
                {
                    context.Cars.Attach(caar);
                    context.Entry<Car>(caar).State = System.Data.EntityState.Modified;
                }
            }
            context.SaveChanges();
        }

Wenn ich dann ändern Sie den Besitzer des Autos, um die zweite person und den code erneut ausführen, wird das Auto owner-Eigenschaft nicht aktualisiert.

Cars[0].Owner = People[1];

Irgendwelche Ideen, was ich falsch mache? Vielen Dank für jede Hilfe.

  • Nur um, ich bin versucht zu erreichen, was vorgeschlagen wird, stackoverflow.com/questions/9382005/...
  • Wie haben Sie es speichern? Wo ist der code dafür? Sie brauchen, um neu zu laden Cars von der DB und dann die Zuordnung .
InformationsquelleAutor user2697817 | 2013-08-19
Schreibe einen Kommentar