EF Core:来自内容实体的可选一对一外键关系
EF Core: Optional one-to-one foreign key relation from content entity
我已经为我的 .net 核心 blazor 应用程序实现了一些数据库上下文。
数据库上下文可以访问外部数据库(无数据库迁移等)
现在我的问题是,当父 table 包含 table 的外键时,我不确定如何使用流畅的 api 或数据属性定义外键。
举个简单的例子:我有一个交易实体,其数据如下:
[Table("transactions")]
public class Transaction
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("trans_num")]
public string TransNum { get; set; }
[Column("shop_id")]
public int? ShopId { get; set; }
[Column("total_amount")]
public decimal TotalAmount { get; set; }
public Shop Shop { get; set;}
}
一些商店实体的数据如下:
[Table("shops")]
public class Shop
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("shop_name")]
public string ShopName{ get; set; }
public Transaction Transaction { get; set;}
}
如模型所示,"shop_id" 是外键。
那么...我的商店实体中没有交易参考。此外,在我的生产场景中,我有一些像这样的可选关系,这意味着例如 shop_id 将为空。
如何指示与我的模型构建器的可选关系?
此致
在模型构建器中设置可选 FK
[Table("shops")]
public class Shop
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("shop_name")]
public string ShopName{ get; set; }
public virual ICollection<Transaction> Transactions { get; set;}
}
modelBuilder.Entity<Shop>()
.HasMany(c => c.Transactions)
.WithOptional(c => c.Shop)
.HasForeignKey(c => c.ShopId)
.WillCascadeOnDelete(false);
如果你只寻找 EF 核心,那么你可以参考这个 link :
我已经为我的 .net 核心 blazor 应用程序实现了一些数据库上下文。 数据库上下文可以访问外部数据库(无数据库迁移等)
现在我的问题是,当父 table 包含 table 的外键时,我不确定如何使用流畅的 api 或数据属性定义外键。
举个简单的例子:我有一个交易实体,其数据如下:
[Table("transactions")]
public class Transaction
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("trans_num")]
public string TransNum { get; set; }
[Column("shop_id")]
public int? ShopId { get; set; }
[Column("total_amount")]
public decimal TotalAmount { get; set; }
public Shop Shop { get; set;}
}
一些商店实体的数据如下:
[Table("shops")]
public class Shop
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("shop_name")]
public string ShopName{ get; set; }
public Transaction Transaction { get; set;}
}
如模型所示,"shop_id" 是外键。
那么...我的商店实体中没有交易参考。此外,在我的生产场景中,我有一些像这样的可选关系,这意味着例如 shop_id 将为空。
如何指示与我的模型构建器的可选关系?
此致
在模型构建器中设置可选 FK
[Table("shops")]
public class Shop
{
[Key]
[Column("id")]
public int Id { get; set; }
[Column("shop_name")]
public string ShopName{ get; set; }
public virual ICollection<Transaction> Transactions { get; set;}
}
modelBuilder.Entity<Shop>()
.HasMany(c => c.Transactions)
.WithOptional(c => c.Shop)
.HasForeignKey(c => c.ShopId)
.WillCascadeOnDelete(false);
如果你只寻找 EF 核心,那么你可以参考这个 link :