Я создаю веб-приложение с использованием ASP .NET MVC5 и EF6.
Я пытаюсь вставить данные в отношение «один к одному», определенное так:
Models
public class Client
{
public int ClientId { get; set; }
[Required]
public string Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
[ForeignKey("Client")]
public int AddressId { get; set; }
[Required]
public string StreetName { get; set; }
public Client Client { get; set; }
}
Где Address является зависимым концом.
Теперь я хочу заполнить эти две таблицы, используя EF и в / Migrations / Configuration.cs Я добавил следующий код:
internal sealed class Configuration : DbMigrationsConfiguration<MR_TrackTrace.Models.ApplicationDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(MR_TrackTrace.Models.ApplicationDbContext context)
{
var clients = new List<Client>
{
new Client { Name = "John" },
new Client { Name = "Mary" },
new Client { Name = "Philip" }
};
clients.ForEach(s => context.Clients.AddOrUpdate(p => p.Name, s));
context.SaveChanges();
var addresses = new List<Address>
{
new Address { StreetName = "something", Client = clients.FirstOrDefault(s => s.Name == "John") },
new Address { StreetName = "other", Client = clients.FirstOrDefault(s => s.Name == "Philip") },
new Address { StreetName = "another", Client = clients.FirstOrDefault(s => s.Name == "Mary") }
};
addresses.ForEach(s => context.Addresses.AddOrUpdate(p => p.Name, s));
context.SaveChanges();
}
}
Теперь, после добавления миграции и обновления базы данных, я проверил таблицы, и клиент построен и заполнен в соответствии, но в таблице адресов столбец с именем ClientId имеет вид какожидается, потому что это внешний ключ.
Но этот столбец не заполнен ожидаемым идентификатором, вместо этого он заполнен "0".Используя:
Client = clients.FirstOrDefault(s => s.Name == "John")
Я ожидал, что контекст автоматически установит ClientId для этой таблицы.
Может кто-нибудь помочь мне направить меня через эту проблему?Заранее спасибо!