【问题标题】:mvc database first issues with edmx/relationships and view showing id fieldmvc 数据库第一个问题与 edmx/relationships 和显示 id 字段的视图有关
【发布时间】:2016-01-19 11:01:15
【问题描述】:

我的任务很简单,我需要创建一个允许 crud 操作的 library mvc web app,唯一的限制是一本书可以有多个作者,也可以有多个出版商。

为此,这是我的数据库模型:

和books->books_authors->authors表关系各自的sql代码,publishers关系的定义方式相同

CREATE TABLE [dbo].[BOOKS](
[ID] [int] NOT NULL,
[TITLE] [nvarchar](max) NOT NULL,
[PAGES] [int] NOT NULL,
[SYNOPSIS] [nvarchar](max) NOT NULL,
[PUBLISHDATE] [date] NOT NULL,
[ISBN] [nvarchar](max) NOT NULL,
[SUBJECT] [nvarchar](max) NOT NULL,
CONSTRAINT [PK_BOOKS] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO


CREATE TABLE [dbo].[BOOKS_AUTHORS](
[BOOKID] [int] NOT NULL,
[AUTHORID] [int] NOT NULL,


CONSTRAINT [PK_BOOKS_AUTHORS] PRIMARY KEY CLUSTERED 
(
    [BOOKID] ASC,
    [AUTHORID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[BOOKS_AUTHORS]  WITH CHECK ADD  CONSTRAINT [FK_BOOKS_AUTHORS_AUTHORS] FOREIGN KEY([AUTHORID])
REFERENCES [dbo].[AUTHORS] ([ID])
GO
ALTER TABLE [dbo].[BOOKS_AUTHORS] CHECK CONSTRAINT [FK_BOOKS_AUTHORS_AUTHORS]
GO
ALTER TABLE [dbo].[BOOKS_AUTHORS]  WITH CHECK ADD  CONSTRAINT [FK_BOOKS_AUTHORS_BOOKS1] FOREIGN KEY([BOOKID])
REFERENCES [dbo].[BOOKS] ([ID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[BOOKS_AUTHORS] CHECK CONSTRAINT [FK_BOOKS_AUTHORS_BOOKS1]
GO




CREATE TABLE [dbo].[AUTHORS](
    [ID] [int] NOT NULL,
    [FIRSTNAME] [nvarchar](max) NOT NULL,
    [LASTNAME] [nvarchar](max) NOT NULL,
 CONSTRAINT [PK_AUTHORS] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

现在谈谈我的问题,当我将 ado.net 模型添加到 mvc Web 应用程序时,edmx 看起来像这样:

我以为我定义了 BOOKS 和 BOOKS_AUTHORS/BOOKS_PUBLISHERS 之间的一对多关系,为什么它现在出现在 edmx 上?

我的另一个问题是,鉴于上述 edmx 模型,当我创建一个带有视图的脚手架控制器时,创建操作将 BOOKS 中的 ID 字段列为输入,而不是在索引操作上隐藏相同 ID字段被隐藏,如下所示:

【问题讨论】:

  • 你的id字段是自动生成的吗?
  • 我已经在主表上完成了它,但我仍在努力处理关系表,即 BOOKS_AUTHORS,在这个表上,两列都必须标记为主键,对吗?我还需要对关系表做些什么吗?
  • 你用自动增量/标识将其设为主键?
  • 仅限书籍、作者和出版商

标签: c# sql sql-server asp.net-mvc entity-framework


【解决方案1】:

实体框架 edmx,不显示引用关系表。 这就是为什么它显示书籍和作者之间的多对多关系

根据MSDN是纯连接表

第二个问题是因为您没有将主键定义为身份(自动生成)

【讨论】:

  • 我现在正在除关系表之外的所有主表上更正它。复合键定义是否正确,是否也应定义为 Identity?
  • 是的,因为只有edmx会理解用户不必输入它,因为主键不能为空
  • 但是在 BOOKS_AUTHORS 表上我只能选择其中一列作为标识列,我知道 BOOKID 和 AUTHORID 都必须是复合主键
  • 它们都不会是该表上的标识,因为它只是一个纯连接表,我们也将其称为参考表
  • 很高兴它帮助了@user2983177
【解决方案2】:

在不是关系的 EDMX 文件中,显示导航属性, 它允许您从一个实体导航到“连接”实体

在使用Book 表格时,您可以导航到author 表格

var a=(from d in _db.Book.Include(AUTHOR)...) 它将包括要在同一 Linq 中使用的作者表

对于第二个查询,使您的 Id 字段自动生成。

【讨论】:

  • 这是否意味着我必须手动将“名字”、“姓氏”和“出版商名称”字段添加到索引视图中?
  • 通过脚手架,将根据EF生成的类生成索引页面。因此,如果您的Book类中没有某些内容并且您想要它,则必须创建一个新的模型类,该类将具有您在索引页面上需要的所有数据。
  • @user2983177 是的,我想是的
  • 我有几个关于视图模型方法的问题,所以我将创建一个新问题并将人们链接到这个问题
  • @Viplock 你能检查我的其他问题吗:stackoverflow.com/questions/34882018/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多