流利的API生成外键与DataAnnotation产生的结果不同

时间:2018-11-23 12:04:19

标签: c# data-annotations ef-fluent-api

我正在尝试将所有域类转换为使用流利的API配置,以从中删除所有数据注释。

我在外键配置上有些挣扎。

在以下课程中

public class AccountPnL
{
    public int AccountPnlId { get; set; }

    [ForeignKey("Account")]
    public int AccountId { get; set; }
    public Account Account { get; set; }

    public DateTime TradeDate { get; set; }

    public decimal? TotalCommodityPnL { get; set; }
    public decimal? TotalCommodityOptionsPnL { get; set; }
    public decimal? TotalEquityPnL { get; set; }
    public decimal? TotalEquityOptionsPnL { get; set; }
}

数据注释在迁移时会产生以下内容

table.ForeignKey(
     name: "FK_AccountPnLs_Accounts_AccountID",
     column: x => x.AccountID,
     principalSchema: "BatlCtx",
     principalTable: "Accounts",
     principalColumn: "AccountId",
     onDelete: ReferentialAction.Cascade);

我正在尝试创建流畅的API代码以产生相同的结果,即每1个AccountPnL关系有1个帐户。我尝试了许多方法,包括Microsoft文档中有关Fluent API的方法,但由于文章是2016年以来的,所以似乎已经过时了。(即.Entity不再是构建器上的方法)

我在注释掉数据注释后的最新尝试

            builder.HasOne(u => u.Account)
               .WithMany(v => v.AccountPnLs)
               .HasForeignKey(x => x.AccountId)
               .HasConstraintName("FK_AccountPnLs_Accounts_Id");

在迁移中产生与DataAnnotation相同的代码,但是 我确实读过,如果使用fluent API进行配置,则该类不再需要这些属性。

如果这些属性不再在类中,那么如何引用Account和AccountId?

在类中未定义导航属性时,是否有其他方法可以编写流畅的API?

0 个答案:

没有答案