【发布时间】: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