Code First 一对多关系的多个外键

2024-03-17

我在使用 Entity Framework 6、Code First Fluent API 时遇到了一些不符合惯例的问题。

一个典型的例子是我有一个名为软件的实体。我不希望数据库表被称为 Softwares。它应该被称为软件。但也有一些其他的偏离。

问题是,为外键创建了 2 列,而应该只创建 1 列。例如,在我的域中,SoftwareFiles 和 Software 之间是 1:m 关系。 (逻辑是,可能有超过 1 个与某个软件相关的文件,例如,由于服务包的原因,Windows XP 将有超过 1 个 ISO 与其关联)。

文件:

public class Software
{
    public string Description { get; set; }
    public int Id { get; set; }
    public SoftwareType Type { get; set; }
    public int TypeId { get; set; }

    public virtual ICollection<SoftwareFile> SoftwareFiles { get; set; }
}

public class SoftwareFile
{
    public int Id { get; set; }
    public string FileName { get; set; }
    public FileTypes FileType { get; set; }
    public string Name { get; set; }
    public Software Software { get; set; }
    public int SoftwareId { get; set; }
}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //  Set up the SoftwareFile table
        modelBuilder.Entity<SoftwareFile>().Property(s => s.FileName).HasMaxLength(250).IsRequired().IsVariableLength();
        modelBuilder.Entity<SoftwareFile>().Property(s => s.FileType).IsRequired();
        modelBuilder.Entity<SoftwareFile>().HasRequired(s => s.Software).WithMany().HasForeignKey(s => s.SoftwareId);

        modelBuilder.Entity<Software>().ToTable("Software");
        modelBuilder.Entity<Software>().Property(s => s.Description).HasMaxLength(250).IsOptional().IsVariableLength();
        modelBuilder.Entity<Software>().HasRequired(s => s.Type).WithMany().HasForeignKey(t => t.TypeId);


        base.OnModelCreating(modelBuilder);
    }

这就是创建一个软件ID列和一个软件_Idsdf 数据库中的列。

有谁知道我如何才能以这种方式背离惯例?

Cheers


双外键与表的重命名无关。

去除

 modelBuilder.Entity<SoftwareFile>().HasRequired(s => s.Software).WithMany().HasForeignKey(s => s.SoftwareId);

line.

这行代码表示有一个一面之间的一对多关系Software and SoftwareFile应该使用SoftwareId属性作为外键。

But you do have a SoftwareFiles属性于Software,这使得 EF 假设您想要定义第二个,两面性,您选择不为其提供显式外键的两个实体之间的一对多关系。

因此,EF 通过创建第二个外键属性来解决这个问题,名为Software_Id!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Code First 一对多关系的多个外键 的相关文章

随机推荐

  • 用 python 绘制 - 折线图取消选择所有

    我得到了一个折线图 其中有多条线代表不同频率的正弦波 我想看一下特定的波浪 而其余的都不在图表中 我知道我可以在图例中单击我不想看到的线条 这样它们就会消失 我想知道是否有一种交互式方式可以一次单击取消选择所有行 而不是单击每一行 My c
  • 使用 ASP.NET 5 中的默认 DI 容器一次性注册所有服务,类似于 Autofac

    对于 ASP NET 5 已经默认提供了一个 DI 它看起来很有趣 我一直在使用 Autofac 和 MVC 5 它可以选择一次注册所有程序集 下面是在 Autofac 中注册所有以 Service 结尾的类的示例代码 Autofac Co
  • React 和 Typescript 与 webpack 打字问题

    我正在尝试创建一个asyncComponent使用 TypeScript 构建高阶组件 但无法完全获得正确的类型 本质上 这可以在 JS 和 webpack 中工作 const Auth asyncComponent gt require
  • 在 ASP.NET MVC3 RC2 中显示复杂类型

    我有一个使用复杂类型作为属性的模型 namespace Web Models public class Business IModel Key HiddenInput DisplayValue false public Guid ID ge
  • 如何查询从 varchar 类型获取最大 id 和数字中的值?

    我有表和列 ID 值为 1 2 3 10 11 12 13 如何查询 varchar 类型的最大 id 我曾尝试过 select MAX id from table 但结果是9 请帮忙 看起来这些值是字符串 它选择最大的字符串 如果您希望它
  • 将 SQLite 设置为 Laravel 5.1 中单元测试的数据库

    我正在尝试在 Laravel 5 1 中设置单元测试 继文档 http laravel com docs 5 1 testing我看到这个 Laravel 在构建时就考虑到了测试 其实支持测试 PHPUnit 是开箱即用的 and 运行测试
  • CSS Div 背景图像固定高度 100% 宽度

    我正在尝试设置一系列具有背景图像的 div 每个 div 都有自己的固定高度 并拉伸以填充宽度 即使顶部 底部被剪切的溢出也是如此 我只是不想要边缘有空白 目前 我有 http jsfiddle net ndKWN http jsfiddl
  • 如何获取java中创建的日期图片

    我想提取 jpg 文件的创建日期 Java 有 File 对象的 lastModified 方法 但似乎不支持从文件中提取创建日期 我相信这些信息存储在文件中 因为当我将鼠标指针悬停在 Win XP 中的文件上时看到的日期与我在 DOS 中
  • 派生类的成员函数是否继承了基类的虚拟性?

    假设我们有以下两个类 A 是具有虚拟析构函数的基类 B 是其析构函数没有 virtual 限定符的派生类 我的问题是 如果我要从 B 派生更多类 B 的析构函数是否会自动继承虚拟性 或者我需要在 B class A public A std
  • Heroku 已成功部署,但我仍然没有运行任何 Web 进程

    我正在尝试将电报机器人推入 Heroku 这些是我的文件夹中的文件 new bot requirements txt Procfile worker python new bot py init py empty new bot py en
  • Zend Framework 路由:参数数量未知

    我正在尝试为 N 级类别深度编写一条路线 因此 通常的类别 URL 如下所示 http website my category my subcategory my subcategory level3 my subcategory leve
  • (UWP) 将网格另存为 png

    我正在开发一个 UWP 应用程序 它有一个带有子项 图像和文本块的网格 我有两件事想要实现并需要帮助 如何使用预定义名称将 Grid 元素及其子内容作为图像 最好是 PNG 保存在本地文件夹中 如何检索此保存的图像 然后将其作为附件与其他兼
  • 为什么这个简单的连接查询使用子查询会明显更快?

    我有两张桌子 order details这是 100 000 行 并且outbound即 10 000 行 我需要加入他们的专栏order number 两者都是 VARCHAR 50 order number 在出站表中不唯一 CREAT
  • 如何根据返回值执行不同的查询?

    我有一个足球比赛列表 定义如下 id datetime status gameweek round id home team id 1 2019 03 31 00 00 00 1 29 12696 1243 2 2019 03 31 00
  • 如何在Python中获取所有直接子目录

    我正在尝试编写一个简单的Python脚本 它将所有子目录中的index tpl复制到index html 有一些例外 我因尝试获取子目录列表而陷入困境 import os def get immediate subdirectories a
  • 在两个不同的头文件中的两个结构中包含循环依赖项是否错误?

    我有一个非常大的程序无法编译 我怀疑它与跨结构的循环依赖关系有关 当我像下面这样编码时 它不会编译 foo h ifndef FOO define FOO include bar h typedef struct foo Foo struc
  • 创建模型时用 laravel 返回模型

    我需要将保存为 json 的新模型发送到前面 但我看不到响应中的列organizationid 这是我的模型 class Organization extends Model protected table core organizatio
  • 强制纵向模式

    好吧 由于没有人回答我之前的问题 我开始相信可能没有简单的方法可以做到这一点 但我很乐观 这是我的问题 在我的应用程序中 我使用常规 UIButton 从 ViewControllerOne 切换到 ViewControllerTwo Vi
  • 用于动态创建元素的 jQuery CSS()

    我正在使用 jQuery CSS 函数来设置一些元素的样式 element css style 这是可行的 但部分元素是在页面加载后动态创建的 这应该是 element live created function this css styl
  • Code First 一对多关系的多个外键

    我在使用 Entity Framework 6 Code First Fluent API 时遇到了一些不符合惯例的问题 一个典型的例子是我有一个名为软件的实体 我不希望数据库表被称为 Softwares 它应该被称为软件 但也有一些其他的