This is my design:
public class AircraftModel
{
public Guid Id { get; set; }
public string Name { get; set; }
public Guid ManufacturerId { get; set; }
public virtual Manufacturer Manufacturer { get; set; }
}
Now, I tried following code to generate data:
context.AircraftModels.AddOrUpdate(m => m.Name
, new AircraftModel {
Name = "Global Express XRS",
Manufacturer = context.Manufacturers.Single(c => c.Name == "Bombardier Inc.")
}
);
It should work like charm I though, but it didn't. The problem was, that the Manufacturer was set to null after running AddOrUpdate - I guess because the ManufacturerId didn't match Manufacturer object.
When I changed to code to this, it worked fine:
context.AircraftModels.AddOrUpdate(m => m.Name
, new AircraftModel {
Name = "Global Express XRS",
ManufacturerId = context.Manufacturers.Single(c => c.Name == "Bombardier Inc.").Id
}
);
Ok, so there's obvious problem with syncing the Manufacturer object and the ManufacturerId.
I've decided to keep them in sync using following modification:
public class AircraftModel
{
private Manufacturer _manufacturer;
public Guid Id { get; set; }
public string Name { get; set; }
public Guid ManufacturerId { get; set; }
public virtual Manufacturer Manufacturer
{
get { return _manufacturer; }
set
{
if (value != null && value.Id != ManufacturerId)
ManufacturerId = value.Id;
_manufacturer = value;
}
}
}
{
private Manufacturer _manufacturer;
public Guid Id { get; set; }
public string Name { get; set; }
public Guid ManufacturerId { get; set; }
public virtual Manufacturer Manufacturer
{
get { return _manufacturer; }
set
{
if (value != null && value.Id != ManufacturerId)
ManufacturerId = value.Id;
_manufacturer = value;
}
}
}
Now this code works as expected. Not sure if it's a bug or "feature"?...