【问题标题】:How to scaffold a SQL Server database with ASP.Net Entity Framework如何使用 ASP.Net Entity Framework 搭建 SQL Server 数据库
【发布时间】:2017-05-31 19:32:48
【问题描述】:

我目前正在使用 SQL Server 数据库,需要使用 Entity Framework 将其连接到 ASP.Net。我的数据库中目前没有外键,我是否仍然能够构建数据库并使用诸如.Include() 之类的命令运行 LINQ 查询?

我遇到的当前问题是我的数据库模型存储了历史数据,因此我有几个带有复合主键的表。如果数据库中没有这种一对一关系,我将无法运行任何关于关系的查询,例如 .Include() 方法。

所以我的问题如下:

  1. 是否必须在 SQL Server 数据库中包含外键才能使用 .Include() 等函数?

  2. 我在网上阅读到,在 SQL Server 数据库中包含主复合键和单个 PK 之间的 FK 关系的最简单方法是在表中创建虚拟列,以便将复合主键与表外键。除了创建虚拟列或重组数据之外,是否有更好的方法来创建 FK 关系?

以下是复合主键到单个主键的外观示例:

ID*| CODE* | YEAR* | SEQ*| DATA
01 | ABCD  | 2015  | 01  | 23
01 | ABCD  | 2016  | 01  | 24
02 | ABCD  | 2016  | 01  | 21


CODE* | DESC
ABCD | AlphabetSoup
  • = 表的主键

【问题讨论】:

  • 依赖实体FK需要指向主体实体PK。在您的示例中,具有复合 PK 的表是依赖表,因此将 Table1.CODE 设置为与 Table2.CODE 的 FK 关联没有问题。关联将是多(表 1)对一(表 2)。

标签: sql sql-server linq data-modeling composite-primary-key


【解决方案1】:

我是否必须在 SQL Server 数据库中包含外键

不,您可以向您的模型添加关联。但这并不意味着在数据库中没有外键是明智的。如果可以的话,尽快添加它们,最好是昨天。

您可以使用 fluent API 将关联添加到 EF 类模型,例如:

modelBuilder.Entity<Main>()
            .HasRequired(m => m.Code).WithMany()
            .HasForeignKey(m => m.CODE);

...其中Main 是具有复合PK 的表。

在表中创建虚拟列

不确定你的意思。如您所见,复合 PK 的一个字段可以很好地用作另一个表中 one PK 字段的 FK(表示为 Code)。

再次,将外键添加到您的数据库中,这样您就有了参照完整性。目前,不能保证Include 会正常工作,因为Main 表的CODE 列中可能存在不匹配的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    相关资源
    最近更新 更多