У меня есть следующие C# Entity Framework код Первые объекты, определенные:Code First - внешний ключ Ссылка не загружая о назначении Id
class Program
{
static void Main(string[] args)
{
var context = new MyContext();
var person = new Person
{
FirstName = "Nadege",
LastName = "Deroussen",
BirthDate = DateTime.Now,
AccessCode = new AccessCode { Code = "ABC" }
};
context.Persons.Add(person);
var accessCode = new AccessCode { Code = "MGH" };
context.AccessCodes.Add(accessCode);
context.SaveChanges();
var person = context.Persons.Where(e => e.Id == 1).Single();
person.AccessCodeId = 2;
context.SaveChanges();
Console.Write("Person saved !");
Console.ReadLine();
}
}
public class Person
{
public int Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public DateTime BirthDate { get; set; }
public int AccessCodeId { get; set; }
[ForeignKey("AccessCodeId")]
public virtual AccessCode AccessCode { get; set; }
}
public class AccessCode
{
public int Id { get; set; }
public string Code { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Person> Persons { get; set; }
public DbSet<AccessCode> AccessCodes { get; set; }
}
В методе Main
, после назначения AccessCodeId = 2
, если я проверить AccessCode
ссылку в человек, он все еще указывает на AccessCode
с Id == 1
. Как я могу получить это авто-обновление?
Я изучаю EF, поэтому, пожалуйста, извините меня, если это не имеет смысла.
Имеют ли лица и AccessCodes наборы генерировать свою собственную идентичность? –
У человека есть 2 объекта: AccessCode и AccessCodeId. Вам не нужен AccessCodeId в Person, потому что у вас есть AccessCode.Id, доступный из Person. Удалите это свойство и EF автоматически создаст взаимосвязь между Person и AccessCodes. Теперь не отображается изменение, потому что вы устанавливаете одно свойство и получаете другое другое, поэтому будьте осторожны. –
@daveL Поскольку оба объекта имеют свойство Id, EF автоматически делает их первичным ключом. –