I'm struggling with creating a simple one-to-many relationship using Code First in EF. I want it to generate daatabase for me but couldn't figure out how to write these classes so it would create it.
I have these classes:
public class Book
{
public int ID { get; set; }
public string Author { get; set; }
public ICollection<Page> Pages { get; set; }
}
public class Page
{ [Key]
public int BookID { get; set; }
public Book Book { get; set; }
public string OtherField { get; set; }
}
But I get error while it ties to generate database:
Unable to determine the principal end of an association between the types 'MvcApplication1.Models.Page' and 'MvcApplication1.Models.Book'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations
I just want to generate two simple tables, "Book" with ID as primary key, and Page with BookID as a primary and foreign key. It really should be simple but I just can't figure it out.
But that is not one-to-many relationship. That is one-to-one relation ship which says that each book has exactly one page. The error says that it cannot determine if the book or the page is principal in the one-to-one relation.
You must modify your entities like this:
public class Book
{
public int ID { get; set; }
public string Author { get; set; }
public virtual ICollection<Page> Pages { get; set; }
}
public class Page
{
public int ID { get; set; }
public int BookID { get; set; }
public virtual Book Book { get; set; }
public string OtherField { get; set; }
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With