c# - EF6 不从数据库生成外键关联

标签 c# sql-server entity-framework entity-framework-6 foreign-key-relationship

问题:

我正在尝试使用数据库优先方法创建 EF6 模型。简而言之,我有 2 个表 tblUsertblMilkMan,它们在 UserID 列上具有外键关系。但是当我创建一个新的 EDMX 图并添加 2 个表时:

  1. 我看不出其中的关系
  2. 未创建任何导航属性

请告诉我我做错了什么!

数据库架构:

ER Diagram

表格脚本:

CREATE TABLE [dbo].[tblMilkMan]
    (
      [RecordID] [INT] NOT NULL
                       IDENTITY(1, 1) ,
      [UserID] [INT] NOT NULL ,
      [IsMyTurn] [BIT] NOT NULL ,
      [RoundRobinOrder] [INT] NOT NULL
    )
ON  [PRIMARY]
GO
ALTER TABLE [dbo].[tblMilkMan] ADD CONSTRAINT [PK_tblMilkMan] PRIMARY KEY CLUSTERED  ([RecordID]) ON [PRIMARY]
GO
ALTER TABLE [dbo].[tblMilkMan] ADD CONSTRAINT [FK__MilkMan__User__UserID] FOREIGN KEY ([UserID]) REFERENCES [dbo].[tblUser] ([UserID]) ON DELETE CASCADE
GO

CREATE TABLE [dbo].[tblUser]
    (
      [UserID] [INT] NOT NULL
                     IDENTITY(1, 1) ,
      [LogonName] [VARCHAR](20) COLLATE SQL_Latin1_General_CP437_CI_AS
                                NOT NULL ,
      [Client] [CHAR](4) COLLATE SQL_Latin1_General_CP437_CI_AS
                         NOT NULL ,
      [Password] [VARCHAR](20) COLLATE SQL_Latin1_General_CP437_CI_AS
                               NOT NULL ,
      [PasswordExpires] [DATETIME] NULL ,
      [PasswordExpiresAfter] [INT] NOT NULL
                                   CONSTRAINT [DF_tblUser_PasswordExpiresAfter] DEFAULT ( 9999 ) ,
      [FirstName] [VARCHAR](20) COLLATE SQL_Latin1_General_CP437_CI_AS
                                NOT NULL ,
      [LastName] [VARCHAR](20) COLLATE SQL_Latin1_General_CP437_CI_AS
                               NOT NULL
    )
ON  [PRIMARY]
    WITH (
         DATA_COMPRESSION = ROW)

GO
ALTER TABLE [dbo].[tblUser] ADD CONSTRAINT [PK_tblUser] PRIMARY KEY CLUSTERED  ([UserID]) WITH (DATA_COMPRESSION = ROW) ON [PRIMARY]
GO
CREATE UNIQUE NONCLUSTERED INDEX [IX_tblUser] ON [dbo].[tblUser] ([UserID]) WITH (FILLFACTOR=90, DATA_COMPRESSION = ROW) ON [PRIMARY]
GO

EDMX 设计器 View :

VS2012 View

对我没有帮助的相关链接:

环境:

  • Visual Studio 旗舰版 2012
  • SQL Server 2014
  • EF6
  • 网络 API2

最佳答案

问题出在下面一行 -

CREATE UNIQUE NONCLUSTERED INDEX [IX_tblUser] ON [dbo].[tblUser] ([UserID])
WITH (FILLFACTOR=90, DATA_COMPRESSION = ROW) ON [PRIMARY]
GO

我不知道同一列上有聚集索引和非聚集索引的原因。常见的最佳实践是创建主键作为聚集索引。 (Source)

如果您删除该非聚集索引,它将在 EDMX 中看到该关系。

如何删除它?

enter image description here

enter image description here

关于c# - EF6 不从数据库生成外键关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27824213/

相关文章:

c# - 生成由 3 个不同的 "sub-arrays"组成的项目数组

c# - Linq 数组列表顺序更改

c# - 在 MVC 中使用 EF 创建多个数据库并将数据库名称作为 web.config 中的变量传递给 InitialCatalogue

c# - 扩展方法 - 更改命名空间

c# - 方法A和B调用了方法C。现在如何找出C里面是谁调用的呢?

c# - 将文件发送到 Web 服务 (asmx),以便将其保存在服务器上

sql-server - 本地 SQL Server : The specified procedure could not be found

sql-server - Azure 是否有适用于 Ms SQL DB 的 REST API 服务/包装器?

sql-server - NHibernate ORDER BY CURRENT_TIMESTAMP 与 DISTINCT 冲突

c# - 如何在 Entity Framework 代码优先方法中映射自身的递归关系