2012-12-20 86 views
1

的EF代碼第一次更新是不是一個工作一對多關係EF代碼第一次更新是不工作的一對多的關係

我有2個實體

// Save 
    public class Person 
    {  
     public int Id { get; set; } 
     public string Name{ get; set; } 
     public virtual List<Email> Emails { get; set; } 
    } 

    public class Email 
    { 
     public int Id { get; set; } 
     public int PersonId { get; set; } 
    public virtual Person person { get; set; } 
     public string EmailAddress { get; set; } 
    } 

EFContext context = new EFContext(); 
    Person person; 
    Email email; 

    person = new Person(); 
    person.Name = "Rocky"; 

    person.Emails = new List<Email>(); 
    email = new Email { EmailAddress = "[email protected]" }; 
    person.Emails.Add(email); 
    email = new Email { EmailAddress = "[email protected]" }; 
    person.Emails.Add(email); 

    context.People.Add(person); 
    context.SaveChanges(); 

// Update 
person = new Person(); 
person.Id=1; 
    person.Name = "Rocky Altered"; 

    person.Emails = new List<Email>(); 
    email = new Email {Id=1, EmailAddress = "[email protected]" }; 
    person.Emails.Add(email); 
    email = new Email {Id=2, EmailAddress = "[email protected]" }; 
    person.Emails.Add(email); 

UpdatePerson(person); 

public bool UpdatePerson(Person entity) 
{ 
var updatePerson = GetPersonById(entity.Id); 
updatePerson.Name=entity.Name; 
updatePerson.Emails=entity.Emails; 

    DataContext.Entry<Person>(updatePerson).State = EntityState.Modified; 
DataContext.SaveChanges(); 
DataContext.Entry<Person>(updatePerson).Reload(); 
} 

2個電子郵件地址的人都正確保存,但更新插入的人的電子郵件地址不起作用。

+1

它是什麼錯誤投擲在你身上? –

回答

0

你應該做這樣的事情:

public class Person 
{  
    public int Id { get; set; } 
    public string Name{ get; set; } 
    public List<Email> Emails { get; set; } 
} 

public class Email 
{ 
    public int Id { get; set; } //This will generate PKey. 
    public virtual Person person { get; set; } //This will create the FKey. 
    public string EmailAddress { get; set; } 
} 
0

您遇到的問題是,你需要一個ForeignKeyAttribute適用於任何FK你明確地包括:

public class Person 
    {  
     public int Id { get; set; } 
     public string Name{ get; set; } 
     public virtual List<Email> Emails { get; set; } 
    } 

    public class Email 
    { 
     public int Id { get; set; } 

     [ForeignKey("Person")] 
     public int PersonId { get; set; } 
    public virtual Person Person { get; set; } 

     public string EmailAddress { get; set; } 
    } 

通過應用屬性您告訴EF Migrations使用「PersonId」作爲「Person」關係的FK列名稱。其餘的應該按原樣工作。