代码之家  ›  专栏  ›  技术社区  ›  Orion Adrian

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

  •  1
  • Orion Adrian  · 技术社区  · 15 年前

    我有一个数据库框架,其中有两个表。第一个表有一个标识列和主键列。第二个表包含两列。一个是varchar主键,另一个是第一个表的可以为空的外键。

    将表添加到模型时,我得到以下验证错误:

    无法为列成员“detailsControlSetID”指定条件,因为它标记有“computed”或“identity”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
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   Craig Stuntz    15 年前

    更新 现在你已经(终于!)发布了复制这个的步骤,我可以让错误发生在我的机器上。将“先导入所有内容”模型与“后导入表”模型的EDMX进行比较,问题就显而易见了。“工作”模式具有以下特点:

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

    “错误”模型具有以下行:

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

    这是两种模式之间唯一实质性的区别。

    所以要解决这个问题:

    1. 右键单击解决方案资源管理器中的EDMX。
    2. 用XML编辑器打开。
    3. 删除 StoreGeneratedPattern="Identity"
    4. 请注意,错误会立即消失。

    有了这个测试案例,我可以做一些研究。结果是 this is a known bug in VS 2010 beta and was fixed a few days ago .

        2
  •  0
  •   Asad    15 年前

    这篇文章可能会有所帮助,发表在 ADO.NET official 工作组日志