我有一个数据库框架,我有两个表。第一个表有一个列,它是一个标识和主键。第二个表包含两列。一个是varchar主键,另一个是第一个表的可空外键。
将表添加到模型时,我收到以下验证错误:
无法为Column成员'DetailsControlSetId'指定条件,因为它标有'Computed'或'Identity'StoreGeneratedPattern。
其中'DetailsControlSetId'是第二个表中的第二个外键引用。
重现的步骤:
1)使用Visual Studio 2010 RC创建新的.Net 3.5 Client Profile项目 2)针对测试数据库运行下面的脚本(空数据库会这样做) 3)创建EDMX模型,以创建的数据库为目标,但选择不导入任何表 4)从数据库中更新模型,选择数据库中的两个表(DetailsControlSet和Application) 5)验证EDMX模型。
表格创建脚本:
CREATE TABLE [dbo].[DetailsControlSet](
[DetailsControlSetId] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_DetailsControlSet] PRIMARY KEY CLUSTERED
(
[DetailsControlSetId] ASC
)
)
GO
CREATE TABLE [dbo].[Application](
[ApplicationName] [varchar](50) NOT NULL,
[DetailsControlSetId] [int] NULL,
CONSTRAINT [PK_Application] PRIMARY KEY CLUSTERED
(
[ApplicationName] ASC
)
)
GO
ALTER TABLE [dbo].[Application] WITH CHECK ADD CONSTRAINT [FK_Application_DetailsControlSet] FOREIGN KEY([DetailsControlSetId])
REFERENCES [dbo].[DetailsControlSet] ([DetailsControlSetId])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Application] CHECK CONSTRAINT [FK_Application_DetailsControlSet]
GO
答案 0 :(得分:2)
更新现在您已经(最终!)发布了重现此步骤的步骤,我可以在我的计算机上发生错误。并且将“首先导入所有内容”与“后导入表格”模型的EDMX区分开来使问题变得明显。 “工作”模型有这一行:
<Property Name="DetailsControlSetId" Type="int" />
“错误”模型有这一行:
<Property Name="DetailsControlSetId" Type="int" StoreGeneratedPattern="Identity" />
这是两种模式之间唯一的实质性差异。
所以解决这个问题:
StoreGeneratedPattern="Identity"
有了这个测试用例,我能够做一些研究。结果是this is a known bug in VS 2010 beta and was fixed a few days ago。
答案 1 :(得分:0)
这篇文章可能有所帮助,发布于ADO.NET
official
团队博客