You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在EF 7中用F#定义复合键?C#转译方案失效求助

EF Core 复合主键配置:C# 转 F# 正确实现

原C#代码

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<VehicleFeature>().HasKey(vf => new { vf.VehicleId, vf.FeatureId });
}

错误方案问题说明

你之前找到的代码fun x -> (x.VehicleId, x.FeatureId) :> obj)存在两个问题:

  1. 语法错误:多了一个多余的右括号;
  2. 逻辑问题:将元组强制转换为obj无法被EF Core正确解析为复合键的表达式。

正确F#实现

override _.OnModelCreating(modelBuilder: ModelBuilder) =
    modelBuilder.Entity<VehicleFeature>()
        .HasKey(fun vf -> {| VehicleId = vf.VehicleId; FeatureId = vf.FeatureId |})
    |> ignore

关键说明

  • 使用F#的匿名记录{| VehicleId = vf.VehicleId; FeatureId = vf.FeatureId |}对应C#中的匿名类型,EF Core可以正确识别并映射为复合主键;
  • 加上|> ignore是为了处理HasKey返回的EntityTypeBuilder实例,避免F#的编译警告(F#不允许直接忽略非unit类型的返回值)。

内容的提问来源于stack exchange,提问作者Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:15:38