【发布时间】:2012-09-22 02:39:47
【问题描述】:
在专注于数据库多年后,我将重返编程领域。我曾经是 VB6 中的一把枪,但 .Net 让我举步维艰。
我正在尝试从现有的数据库在 MVC 中构建 Web 应用程序。我大致关注这个:http://msdn.microsoft.com/en-us/data/gg685489.aspx
我正在使用 Visual Web Developer Express 2010 10.0.40219.1 SP1Rel 我不确定如何计算各种模板和插件的版本。
我正在从现有数据库生成实体数据模型。我使用的三个表都定义了主键和外键,但是当我导入它时,数据模型中没有创建任何关联
似乎有很多不同的方法来构建支持数据库的网络应用程序。如果我更熟悉语法,我现在可以手动编写代码了。
Q1:知道为什么不创建关联吗?
Q2:您能否验证我需要关联来告诉代码生成器如何将所有内容组合在一起? (即在代码中自动生成适当的方法)。我看不出它会如何工作。
Q3:如果我手动创建关联并构建,我会收到一些错误。似乎创建关联会针对实体('CustomerCustomer_ID)创建一个属性,这需要映射到某些东西。但是,当我按“表映射”时,它不在要映射的列表中,我无法添加它。
Error 1 Error 3004: Problem in mapping fragments starting at line 198:
No mapping specified for properties Task.CustomerCustomer_ID in Set Tasks.
An Entity with Key (PK) will not round-trip when: Entity is type [zzzz.Task]
Error 2 Error 11009: Property 'CustomerCustomer_ID' is not mapped.
这是我预计会生成关联的两个表的删节 DDL
CREATE TABLE [dbo].[Customers](
[Customer_ID] [int] IDENTITY(1,1) NOT NULL,
[Customer_Name] [varchar](50) NOT NULL,
........
....
CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED
([Customer_ID] ASC))
CREATE TABLE [dbo].[Tasks](
[Task_ID] [int] IDENTITY(1,1) NOT NULL,
[TaskType_ID] [int] NOT NULL,
[Emp_ID] [int] NOT NULL,
[Customer_ID] [int] NOT NULL,
[Status_ID] [int] NOT NULL,
[Task_Desc] [varchar](300) NULL,
.....
..
CONSTRAINT [PK_Tasks] PRIMARY KEY CLUSTERED
(
[Task_ID] ASC
)
ALTER TABLE [dbo].[Tasks] WITH CHECK ADD CONSTRAINT [FK_Tasks_Customers]
FOREIGN KEY([Customer_ID])
REFERENCES [dbo].[Customers] ([Customer_ID])
GO
【问题讨论】:
-
我从示例 MVCMusicStore 数据库导入,它很好地拾取了关联。有什么不同?我行为不端的数据库的兼容级别是 80 (SQL 2000)。我将其更新为 100 (SQL 2008),现在 一半 的关联正在被拾取。
-
我像这样创建了剩余的缺失关联: 1. 右键单击设计图面,添加关联 2. 定义关联,将其命名为与数据库 FK 相同的名称 3. 这会在底部添加一个属性验证时导致错误的实体。删除属性 4. 删除属性会导致错误,可以通过双击关联并将“依赖属性”更改为正确的列来修复该错误。为什么这是必要的!
-
在错误消息中,它谈到了
CustomerCustomer_ID它是从哪里来的?你是手动添加的吗?通常,您不必手动创建关联。 -
当我手动创建关联时,'CustomerCustomer_ID' 作为属性出现在我的实体中。关联不是从我的数据库中的外键自动创建的,所以我必须手动创建它们。
-
好的,能否将属性重命名为 Customer_id,使其与数据库列名匹配?
标签: asp.net-mvc asp.net-mvc-3 entity-framework associations ado.net-entity-data-model