代码之家  ›  专栏  ›  技术社区  ›  Jaxidian

EF4生成无效脚本

  •  0
  • Jaxidian  · 技术社区  · 14 年前

    当我右键单击 .EDMX 文件并单击 Generate Database From Model ,由于表名的原因,生成的脚本显然是错误的。它生成的是以下脚本。请注意 DROP TABLE 部分与 CREATE TABLE 部分。

    为什么这不一致?

    这显然不是一个可重用的脚本。我创建的是一个名为“address”的实体和一个名为“company”的实体等(都是单数)。实体集名称是复数形式的。“复数新对象”布尔值也不会改变这一点。怎么回事?

    值得一提的是,我最初是通过将edmx指向一个具有非复数名称的表的数据库来生成edmx的,现在我已经做了一些更改,我想换一种方式返回。我想有一个来回的选择,因为db-first和model-first模型在所有场景中都不是理想的,而且我有控制权确保不会出现多人同时双向的合并问题。

    -- --------------------------------------------------
    -- Dropping existing FOREIGN KEY constraints
    -- NOTE: if the constraint does not exist, an ignorable error will be reported.
    -- --------------------------------------------------
    
        ALTER TABLE [Address] DROP CONSTRAINT [FK_Address_StateID-State_ID];
    GO
        ALTER TABLE [Company] DROP CONSTRAINT [FK_Company_AddressID-Address_ID];
    GO
        ALTER TABLE [Employee] DROP CONSTRAINT [FK_Employee_BossEmployeeID-Employee_ID];
    GO
        ALTER TABLE [Employee] DROP CONSTRAINT [FK_Employee_CompanyID-Company_ID];
    GO
        ALTER TABLE [Employee] DROP CONSTRAINT [FK_Employee_PersonID-Person_ID];
    GO
        ALTER TABLE [Person] DROP CONSTRAINT [FK_Person_AddressID-Address_ID];
    GO
    
    -- --------------------------------------------------
    -- Dropping existing tables
    -- NOTE: if the table does not exist, an ignorable error will be reported.
    -- --------------------------------------------------
    
        DROP TABLE [Address];
    GO
        DROP TABLE [Company];
    GO
        DROP TABLE [Employee];
    GO
        DROP TABLE [Person];
    GO
        DROP TABLE [State];
    GO
    
    -- --------------------------------------------------
    -- Creating all tables
    -- --------------------------------------------------
    
    -- Creating table 'Addresses'
    CREATE TABLE [Addresses] (
        [ID] int IDENTITY(1,1) NOT NULL,
        [StreetAddress] nvarchar(100)  NOT NULL,
        [City] nvarchar(100)  NOT NULL,
        [StateID] int  NOT NULL,
        [Zip] nvarchar(10)  NOT NULL
    );
    GO
    
    -- Creating table 'Companies'
    CREATE TABLE [Companies] (
        [ID] int IDENTITY(1,1) NOT NULL,
        [Name] nvarchar(100)  NOT NULL,
        [AddressID] int  NOT NULL
    );
    GO
    
    -- Creating table 'People'
    CREATE TABLE [People] (
        [ID] int IDENTITY(1,1) NOT NULL,
        [FirstName] nvarchar(100)  NOT NULL,
        [LastName] nvarchar(100)  NOT NULL,
        [AddressID] int  NOT NULL
    );
    GO
    
    -- Creating table 'States'
    CREATE TABLE [States] (
        [ID] int IDENTITY(1,1) NOT NULL,
        [Name] nvarchar(100)  NOT NULL,
        [Abbreviation] nvarchar(2)  NOT NULL
    );
    GO
    
    -- Creating table 'Employees'
    CREATE TABLE [Employees] (
        [ID] int IDENTITY(1,1) NOT NULL,
        [PersonID] int  NOT NULL,
        [CompanyID] int  NOT NULL,
        [Position] nvarchar(100)  NOT NULL,
        [BossEmployeeID] int  NULL
    );
    GO
    
    -- --------------------------------------------------
    -- Creating all PRIMARY KEY constraints
    -- --------------------------------------------------
    
    -- Creating primary key on [ID] in table 'Addresses'
    ALTER TABLE [Addresses]
    ADD CONSTRAINT [PK_Addresses]
        PRIMARY KEY ([ID] );
    GO
    
    -- Creating primary key on [ID] in table 'Companies'
    ALTER TABLE [Companies]
    ADD CONSTRAINT [PK_Companies]
        PRIMARY KEY ([ID] );
    GO
    
    -- Creating primary key on [ID] in table 'People'
    ALTER TABLE [People]
    ADD CONSTRAINT [PK_People]
        PRIMARY KEY ([ID] );
    GO
    
    -- Creating primary key on [ID] in table 'States'
    ALTER TABLE [States]
    ADD CONSTRAINT [PK_States]
        PRIMARY KEY ([ID] );
    GO
    
    -- Creating primary key on [ID] in table 'Employees'
    ALTER TABLE [Employees]
    ADD CONSTRAINT [PK_Employees]
        PRIMARY KEY ([ID] );
    GO
    
    -- --------------------------------------------------
    -- Creating all FOREIGN KEY constraints
    -- --------------------------------------------------
    
    -- Creating foreign key on [StateID] in table 'Addresses'
    ALTER TABLE [Addresses]
    ADD CONSTRAINT [FK_Address_StateID_State_ID]
        FOREIGN KEY ([StateID])
        REFERENCES [States]
            ([ID])
        ON DELETE NO ACTION ON UPDATE NO ACTION;
    
    -- Creating non-clustered index for FOREIGN KEY 'FK_Address_StateID_State_ID'
    CREATE INDEX [IX_FK_Address_StateID_State_ID]
    ON [Addresses]
        ([StateID]);
    GO
    
    -- Creating foreign key on [AddressID] in table 'Companies'
    ALTER TABLE [Companies]
    ADD CONSTRAINT [FK_Company_AddressID_Address_ID]
        FOREIGN KEY ([AddressID])
        REFERENCES [Addresses]
            ([ID])
        ON DELETE NO ACTION ON UPDATE NO ACTION;
    
    -- Creating non-clustered index for FOREIGN KEY 'FK_Company_AddressID_Address_ID'
    CREATE INDEX [IX_FK_Company_AddressID_Address_ID]
    ON [Companies]
        ([AddressID]);
    GO
    
    -- Creating foreign key on [AddressID] in table 'People'
    ALTER TABLE [People]
    ADD CONSTRAINT [FK_Person_AddressID_Address_ID]
        FOREIGN KEY ([AddressID])
        REFERENCES [Addresses]
            ([ID])
        ON DELETE NO ACTION ON UPDATE NO ACTION;
    
    -- Creating non-clustered index for FOREIGN KEY 'FK_Person_AddressID_Address_ID'
    CREATE INDEX [IX_FK_Person_AddressID_Address_ID]
    ON [People]
        ([AddressID]);
    GO
    
    -- Creating foreign key on [CompanyID] in table 'Employees'
    ALTER TABLE [Employees]
    ADD CONSTRAINT [FK_Employee_CompanyID_Company_ID]
        FOREIGN KEY ([CompanyID])
        REFERENCES [Companies]
            ([ID])
        ON DELETE NO ACTION ON UPDATE NO ACTION;
    
    -- Creating non-clustered index for FOREIGN KEY 'FK_Employee_CompanyID_Company_ID'
    CREATE INDEX [IX_FK_Employee_CompanyID_Company_ID]
    ON [Employees]
        ([CompanyID]);
    GO
    
    -- Creating foreign key on [BossEmployeeID] in table 'Employees'
    ALTER TABLE [Employees]
    ADD CONSTRAINT [FK_Employee_BossEmployeeID_Employee_ID]
        FOREIGN KEY ([BossEmployeeID])
        REFERENCES [Employees]
            ([ID])
        ON DELETE NO ACTION ON UPDATE NO ACTION;
    
    -- Creating non-clustered index for FOREIGN KEY 'FK_Employee_BossEmployeeID_Employee_ID'
    CREATE INDEX [IX_FK_Employee_BossEmployeeID_Employee_ID]
    ON [Employees]
        ([BossEmployeeID]);
    GO
    
    -- Creating foreign key on [PersonID] in table 'Employees'
    ALTER TABLE [Employees]
    ADD CONSTRAINT [FK_Employee_PersonID_Person_ID]
        FOREIGN KEY ([PersonID])
        REFERENCES [People]
            ([ID])
        ON DELETE NO ACTION ON UPDATE NO ACTION;
    
    -- Creating non-clustered index for FOREIGN KEY 'FK_Employee_PersonID_Person_ID'
    CREATE INDEX [IX_FK_Employee_PersonID_Person_ID]
    ON [Employees]
        ([PersonID]);
    GO
    
    -- --------------------------------------------------
    -- Script has ended
    -- --------------------------------------------------
    
    1 回复  |  直到 14 年前
        1
  •  0
  •   Jaxidian    14 年前

    我一直找不到这个问题的答案。另外,我在重新创建这个问题时遇到了一些问题,我不会从db-first来回切换到model-first场景。因此,我只是假设,来回造成了问题,是一个坏的情况,使英孚通过。