2010-03-11 77 views
1

我有一个数据库框架,我有两个表。第一个表中有一列是一个标识和主键。第二个表格包含两列。一个是varchar主键,另一个是第一个表的可空外键。实体框架不喜欢0..1到*关系

当添加表到模型中,我得到了以下验证错误:

条件不能为列成员“DetailsControlSetId”中指定,因为它是标有“计算”或“身份” StoreGeneratedPattern。

其中“DetailsControlSetId”是在所述第二表中的第二外键引用。

重现步骤:

1)创建与Visual Studio 2010 RC一个新的.NET 3.5客户端配置文件的项目。
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

外键列是实际存储生成的还是设计者错误地导入模型?另外,您正在使用哪个版本的Visual Studio? – Rory 2010-03-11 19:37:52

+0

Duplicate:http://stackoverflow.com/questions/2410590/what-is-the-proper-way-to-create-a-recursive-entity-in-the-entity-framework @Orion,请回答问题I问你原来的问题,而不是重新发布同样的事情。 – 2010-03-11 19:42:52

+0

嗯,这个的重复:http://stackoverflow.com/questions/2382135/recursive-entity-causing-all-sorts-of-problems – 2010-03-11 19:43:34

回答

2

更新贴现在你已经(最后!)张贴步骤来重现这一点,我可以让我的错误发生机。并且,“最初导入所有内容”与“后来导入表格”模型的EDMX使得问题变得明显。 “工作”模式有这样一行:

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

的“错误”模式有这样一行:

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

这两款车型之间的唯一实质性的区别。

因此,要解决这个问题:

  1. 右击EDMX在Solution Explorer。
  2. 用XML编辑器打开。
  3. 删除StoreGeneratedPattern="Identity"
  4. 请注意,错误立即消失。

有了这个测试情况下,我能够做一些研究。原来是this is a known bug in VS 2010 beta and was fixed a few days ago

+0

我知道模型中的差异以及如何手动修复它。我正在寻找根本原因。感谢您发现这是一个错误的研究。 – 2010-03-19 17:42:38

0

这篇文章可能会有所帮助,在ADO.NETofficial团队博客

+0

不幸的是,这是我已经知道的所有基本信息。我不是在寻找如何设置一个基本的实体,而是如何设置这个0..1到*的关系。 – 2010-03-11 20:14:55

+1

您的示例数据库脚本已正确适用于我。我将它应用到一个空的数据库并生成了一个EF模型。没有错误。 – 2010-03-11 21:49:41