這是外國唯一密鑰的情況。
通常,當您擁有關係爲0或1的主體(如Item
)和可選的從屬(NumericItem
)時,相關主鍵也是主體的外鍵。在你的情況下,由於數據庫已經是這樣的,你可以這樣做:
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());
}
}
,或者你可以直接在OnModelCreating
方法做沒有這個NumericItemConfiguration
類,這樣的配置:
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);
}
}
注意我不得不NumericItem
類中刪除您ItemId
財產,否則EF會抱怨這樣的:
項目Id:名稱:每個屬性ñ一個類型中的ame必須是唯一的。屬性 名稱'ItemId'已被定義。
另外,如果這是你想要的東西,請不要忘記,以紀念答案接受;) – Alisson
我得到一個FK Constriant未發現關聯「NumericItem_Item」 - 必須直接在模型指定的外鍵能夠應用這個過濾器 – user3924036
你能提供這兩個表的CREATE TABLE sql腳本嗎?我運行'更新數據庫',它運行良好。 – Alisson