entity-framework - 没有外键的 Entity Framework 代码优先映射

标签 entity-framework mapping code-first

我有两个表:

要求

  • ID (int) PK
  • ClientID (int)
  • 工作编号 (int)

  • 评论
  • ID (int) PK
  • Job_ID (int)
  • 评论 (varchar)

  • 这些表没有外键,也不可能添加任何外键。我正在尝试在 EF 中映射它们。我为每个类都有类,并且我试图用流畅的代码定义关系,以将 Comment.Job_ID 映射到 Requirement.JobNumber。一个需求可以有很多注释。 Requirement 有一个 Comments 列表,Comment 有一个 Requirement 属性。

    我有这个映射设置:
    modelBuilder.Entity<Comment>().HasRequired(c => c.Requirement)
                        .WithMany(s => s.Comments)
                        .HasForeignKey(f => f.Job_ID);
    

    我一直在试图让 Comment.Job_ID 映射到 Requirement.JobNumber。

    任何帮助表示赞赏。

    最佳答案

    这是不可能的。使用 Entity Framework Comment.Requirement 的实体所指的导航属性通常由 Requirement 中的(主)键属性标识,即通过 ID .没有映射选项来定义目标属性是关键属性之外的任何其他属性 - 例如 JobNumber或其他非关键属性。

    我只能想象你可以“伪造”模型中的主键属性为 JobNumber而不是 ID (假设 JobNumberRequirement 表中是唯一的):

    modelBuilder.Entity<Requirement>().HasKey(r => r.JobNumber);
    

    我不知道这是否会产生其他不希望的副作用。 (如果 JobNumber 不是唯一的,它肯定不起作用,因为 EF 不允许将具有相同键的多个实体附加到上下文和更新/删除等不会在中找到正确的记录数据库。)对我来说感觉不对劲。老实说,我什至不会尝试,因为您在数据库中没有真正的外键关系,忘记导航属性 Requirement.CommentsComment.Requirement和使用手册 join s 在 LINQ 中关联表数据/实体,因为我在给定情况下需要它们。

    关于entity-framework - 没有外键的 Entity Framework 代码优先映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13498795/

    相关文章:

    c# - 在 Azure 查询详细信息中查看时不保留 SQL 注释

    c# - 模型重建后如何保留自定义导航属性?

    asp.net-mvc-3 - 使用 for 循环是在 ASP.NET MVC 应用程序中添加多个相似数据库条目的最优雅的方法吗? ( C# )

    java - 使用转换器和提供程序而不是属性映射时如何让 ModelMapper.validate() 成功?

    c# - Entity Framework 6+ Code First View 中的多个模型

    sql-server - 使用 EF Code First 的 SQL Server 中的不可空日期时间

    c# - 选择符合特定条件的 child 的 parent

    Java:将 XML 映射到其他 XML(翻译)

    c# - 使用 C# 泛型的助手

    entity-framework - 如何在“代码优先”拖放创建模式下使用 Entity Framework ?