С modelBuilder.Entity<Product>().Map
вы используете довольно сложную опцию отображения в Code-First, которая называется Table Splitting . Ваше сопоставление говорит о том, что свойства вашей сущности Product
, которые вы перечислили в Properties(p => new...)
, должны быть сопоставлены с другой таблицей, чем остальные свойства. Остальные свойства находятся в таблице Products
, как вы определили в своем вызове ToTable
. Для других свойств вы вообще не указали имя таблицы (которое должно быть ToTable
в действии Map(config => config.ToTable(...) ...
). Я предполагаю, что EF предполагает какое-то имя таблицы по умолчанию Product1
, которое, очевидно, не существует.
Я не уверен, действительно ли вы хотите разделить вашу сущность на две разные таблицы. Читая ваши первые предложения ...
... неидентичные имена столбцов и свойства, которые не существуют в
схема ...
... Я думаю, вам нужны в основном следующие два параметра сопоставления:
Свойства в классе модели без соответствующих столбцов в базе данных не являются сопоставленными свойствами:
modelBuilder.Entity<Product>().Ignore(p => p.QuantityInStock);
С аннотациями данных:
[NotMapped]
public Int16 QuantityInStock { get; set; }
И вы можете сопоставить имя свойства с именем другого столбца:
modelBuilder.Entity<Product>().Property(p => p.Discontinued)
.HasColumnName("MyOtherColumnName");
С аннотациями данных:
[Column("MyOtherColumnName")]
public bool Discontinued { get; set; }