Это иностранный уникальный ключ.
Обычно, если у вас есть основной объект (например, Item
) и необязательный зависимый (NumericItem
) в отношении 0 или 1, зависимый первичный ключ также является внешним ключом для принципала. В вашем случае, так как база данных уже так, вы могли бы сделать так:
public class Item
{
public int ItemId { get; set; }
public string ItemNo { get; set; }
public virtual NumericItem NumericItem {get;set;} //navigation
}
public class NumericItem
{ //This is a subset of the Item entity
public Item Item { get; set; }
public int ItemNo { get; set; } //this is a primary key, different type
}
public class NumericItemConfiguration : EntityTypeConfiguration<NumericItem>
{
public NumericItemConfiguration()
{
HasKey(n => n.ItemNo);
HasRequired(n => n.Item).WithOptional(i => i.NumericItem).Map(m => m.MapKey("ItemId"));
}
}
public class MyContextContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// do your stuff, and add your configuration here...
modelBuilder.Configurations.Add(new NumericItemConfiguration());
}
}
или вы можете сделать это без этого NumericItemConfiguration
класса, делая конфигурацию непосредственно в OnModelCreating
методе:
public class MyContextContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// do your stuff, and add your configuration here...
modelBuilder.Entity<NumericItem>().HasKey(n => n.ItemNo);
modelBuilder.Entity<NumericItem>().HasRequired(n => n.Item).WithOptional(i => i.NumericItem);
}
}
Обратите внимание, я должен был удалить ItemId
свойство из NumericItem
класса, иначе EF будет жаловаться, как это:
Itemid: Имя: Каждое свойство п ame в типе должны быть уникальными. Свойство name 'ItemId' уже определен.
Кроме того, если это то, что вы хотите, пожалуйста, не забудьте отметить ответ, как принято;) – Alisson
я получаю FK Constriant не найдено для объединения «NumericItem_Item» - должны непосредственно указать внешние ключи от модели к быть в состоянии применить этот фильтр – user3924036
Можете ли вы предоставить SQL-скрипт 'CREATE TABLE' для этих двух таблиц? Я запускал «Обновление-База данных», и он работает хорошо. – Alisson