实体框架不喜欢0..1到*的关系

时间:2010-03-11 19:33:31

标签: c# sql entity-framework

我有一个数据库框架,我有两个表。第一个表有一个列,它是一个标识和主键。第二个表包含两列。一个是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

2 个答案:

答案 0 :(得分:2)

更新现在您已经(最终!)发布了重现此步骤的步骤,我可以在我的计算机上发生错误。并且将“首先导入所有内容”与“后导入表格”模型的EDMX区分开来使问题变得明显。 “工作”模型有这一行:

<Property Name="DetailsControlSetId" Type="int" />

“错误”模型有这一行:

<Property Name="DetailsControlSetId" Type="int" StoreGeneratedPattern="Identity" />

这是两种模式之间唯一的实质性差异。

所以解决这个问题:

  1. 右键单击解决方案资源管理器中的EDMX。
  2. 使用XML编辑器打开。
  3. 删除StoreGeneratedPattern="Identity"
  4. 请注意,错误会立即消失。
  5. 有了这个测试用例,我能够做一些研究。结果是this is a known bug in VS 2010 beta and was fixed a few days ago

答案 1 :(得分:0)

这篇文章可能有所帮助,发布于ADO.NET official团队博客