'The child/dependent side could not be determined for the one-to-one relationship
I am trying to update my database with "update-database" command in package manager console, But I have this kind of error:
The child/dependent side could not be determined for the one-to-one
relationship between 'Country.CapitalCity' and 'CapitalCity.Country'. To
identify the child/dependent side of the relationship, configure the foreign
key property. If these navigations should not be part of the same
relationship configure them without specifying the inverse. See
http://go.microsoft.com/fwlink/?LinkId=724062 for more details.
My Model classes look like this:
public class Country
{
public int ID { get; set; }
public string Name { get; set; }
public long Population { get; set; }
public int CapitalCityID { get; set; }
public CapitalCity CapitalCity { get; set; }
}
public class CapitalCity
{
public int ID { get; set; }
public int Name { get; set; }
public int CountryID { get; set; }
public Country Country { get; set; }
}
After searching info about this problem, I added the following code in my DbContextModelSnapshot, but I still have problem.
modelBuilder.Entity<Country>()
.HasOne(a => a.CapitalCity)
.WithOne(a => a.Country)
.HasForeignKey<CapitalCity>(c => c.CountryID);
What mistake do I have?
Solution 1:[1]
You have to put the below code in your DBContext class, not in SnapShot class. Don’t modify the Snapshot class, it’s auto generated class.
modelBuilder.Entity<Country>()
.HasOne(a => a.CapitalCity)
.WithOne(a => a.Country)
.HasForeignKey<CapitalCity>(c => c.CountryID);
Solution 2:[2]
Just to point it out if you don't really need a one-to-one relationship you can solve it like this and the migration will work out of the box. Valid if a CapitalCity can share the same name with different Countries in this example. You would of course need to factor the possibility that one country changes its capital city name but the other country does not.
public class Country
{
public int ID { get; set; }
public string Name { get; set; }
public long Population { get; set; }
public int CapitalCityID { get; set; }
public CapitalCity CapitalCity { get; set; }
}
public class CapitalCity
{
public int ID { get; set; }
public int Name { get; set; }
}
In this case the better solution would probably be like this though:
public class Country
{
public int ID { get; set; }
public string Name { get; set; }
public long Population { get; set; }
public List<CapitalCity> CapitalCities { get; set; } = new List<CapitalCity>();
}
public class CapitalCity
{
public int ID { get; set; }
public int Name { get; set; }
public int CountryID { get; set; }
public Country Country { get; set; }
}
I think it is better because a lot of countries have or had multiple capital cities.
https://en.wikipedia.org/wiki/List_of_countries_with_multiple_capitals
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | vivek nuna |
| Solution 2 |
