public class User
{
public int Id {get; set; }
public string Name {get; set; }
public int CurrentLocationId {get; set; }
public List< Location> Locations {get; set; }
public Location CurrentLocation {get; set; }
}
and
public class Location
{
public int Id {get; set; }
[Required]
public int UserId {get; set; }
public string Address {get; set; }
public User User {get; set; }
}
Then, in order to successfully run the migration, I need the following model builder code:
builder.Entity()
.HasOne(x => x.User)
.WithMany(x => x.Locations)
.HasForeignKey(x => x.UserId);
This produced a database I expected and the way I needed it. However, due to the following circular dependency error, I could not save the entity:
p>
InvalidOperationException: The changes cannot be saved because a circular dependency is detected in the data to be saved:’ForeignKey: User {‘CurrentLocationId’}-> Location {‘Id’} ToPrincipal: CurrentLocati on,ForeignKey: Location {‘UserId’} – >User{‘Id’} ToDependent: Location ToPrincipal: User’.
Is there a solution in EF Core 2.0?
I have some options to surround it by changing my data model, but this is the preferred method because I can use database constraints to ensure that all locations are linked back to the user, and each user must set CurrentLocation. I know it can solve the problem, but I can’t really allow null values on the CurrentLocation field!
The code I used to try and store users is as follows (simplified for demonstration purposes):
var location = new Location
{< br /> Address = "Some address"
};
_context.Locations.Add(location);
var user = new User
{
Name = "Stu"
};
_context.Users.Add(user);
user.Locations = new List< br />{
location
};
user.CurrentLocation = location;
await _context.SaveChangesAsync();
And I tried it too
var location = new Location
{
Address = "Some address"
};
var user = new User
{
Name = "Stu",
Locations = new List
{
location
},
CurrentLocation = location
};
_context.Users.Add(user);
await _context.SaveChangesAsync();
But the error is still the same. Can this be fixed by some kind of fancy model builder override? Or am I restricting changes to my data model/allowing null values I shouldn’t really allow null values?
Thanks in advance!
I have a fairly simple data model that contains two entities:
public class User
{
public int Id {get; set; }
public string Name {get; set; }
public int CurrentLocationId {get; set; }
public ListLocations {get; set; }
public Location CurrentLocation {get; set; }
}
and
public class Location
{
public int Id {get; set; }
[Required]
public int UserId {get; set; }
public string Address {get; set; }
public User User {get; set; }
}
Then, in order to successfully run the migration, I need the following model builder Code:
builder.Entity()
.HasOne(x => x.User)
.WithMany(x => x. Locations)
.HasForeignKey(x => x.UserId);
This produces a database that I expect and the way I need it. However, due to the following circular dependency error, I cannot Save entity:
InvalidOperationException: Unable to save changes because a circular dependency was detected in the data to be saved:’ForeignKey: User {‘CurrentLocationId’} -> Location {‘Id’} ToPrincipal: CurrentLocation, ForeignKey: Lo cation {‘UserId’} – >User{‘Id’} ToDependent: Location ToPrincipal: User’.
Is there a solution in EF Core 2.0?
I have some options to surround it by changing my data model, but this is the preferred method because I can use database constraints to ensure that all locations are linked back to the user, and each user must set CurrentLocation. I know it can solve the problem, but I can’t really allow null values on the CurrentLocation field!
The code I used to try and store users is as follows (simplified for demonstration purposes):
var location = new Location
{< br /> Address = "Some address"
};
_context.Locations.Add(location);
var user = new User
{
Name = "Stu"
};
_context.Users.Add(user);
user.Locations = new List< br />{
location
};
user.CurrentLocation = location;
await _context.SaveChangesAsync();
And I tried it too
var location = new Location
{
Address = "Some address"
};
var user = new User
{
Name = "Stu",
Locations = new List
{
location
},
CurrentLocation = location
};
_context.Users.Add(user);
await _context.SaveChangesAsync();
But the error is still the same. Can this be fixed by some kind of fancy model builder override? Or am I restricting changes to my data model/allowing null values I shouldn’t really allow null values?
Thanks in advance!
Answer my own question-I just checked, SQL server does not support deferrable constraints, so EF can’t do it anyway! Change to data model.