Я использую EntityFramework через DbContext и существующую базу данных.
Когда я добавляю сущность Order в свой контекст и вызываю SaveChanges (), я сталкиваюсь с исключением: «Зависимое свойство в ReferentialConstraint сопоставляется с генерируемым хранилищем столбцом. Column: OrderId».
Я полагаю, что это происходит из-за составного ключа в моей таблице OrderAddress, и я надеюсь, что есть способ обойти это ... Я не хочу создавать IDENTITY для этой таблицы.
Вот мои сущности, упрощенно ...
// OrderId is an IDENTITY PK
public class Order
{
public int OrderId { get; set; }
public IList<OrderAddress> Addresses { get; set; }
public int Total { get; set; }
}
// PK on this table is composite key of OrderId and OrderAddressTypeId
public class OrderAddress
{
public int OrderId { get; set; }
public int OrderAddressTypeId { get; set; }
public string Address { get; set; }
}
Вот мой контекст, упрощенный ...
public class StoreContext : DbContext
{
DbSet<Order> Orders { get; set; }
DbSet<OrderAddress> OrderAddresses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Set the Identity for Order
modelBuilder.Entity<Order>()
.Property(x => x.OrderId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
// Set composite key for Order Address
modelBuilder.Entity<OrderAddress>()
.HasKey(x => new { x.OrderId, x.OrderAddressTypeId });
}
}
ПРИМЕЧАНИЕ. Я посмотрел на другие похожие вопросы и попробовал решения, перечисленные безуспешно. Я проверил, что мои внешние ключи правильно настроены в базе данных. В моем вопросе отличается использование составного ключа.
Заранее спасибо за помощь.
UPDATE:
В итоге это никак не связано с составным ключом. В моем методе Context OnModelCreating была дополнительная строка, которая требовала дочернюю сущность OrderSummary, которая основана на представлении в моей базе данных. Линия выглядела так ...
modelBuilder.Entity<OrderSummary>().HasRequired(x => x.Order).WithRequiredPrincipal(x => x.OrderSummary);
Я никогда не предполагал, что OrderSummary будет обязательным принципалом Order. Изменение на следующее решило проблему ...
modelBuilder.Entity<OrderSummary>().HasRequired(x => x.Order);
К сожалению, сообщение об ошибке от EF было не очень конкретным и привело меня в дикую погоню.
Спасибо за внимание.