Хобрук: Ваш путь к мастерству в программировании

EF4 генерирует недопустимый скрипт

Когда я щелкаю правой кнопкой мыши файл .EDMX и выбираю Generate Database From Model, результирующий сценарий явно неверен из-за имен таблиц. Он генерирует следующий сценарий. Обратите внимание на имена таблиц в части DROP TABLE по сравнению с частью CREATE TABLE.

Почему это непоследовательно?

Это явно не многоразовый скрипт. То, что я создал, было сущностью с именем «Адрес» и сущностью с именем «Компания» и т. д. (все в единственном числе). Имена EntitySet во множественном числе. Булево значение «Pluralize New Objects» также не меняет этого. Так в чем же дело?

Что бы это ни стоило, я изначально сгенерировал EDMX, указав его на базу данных, в которой были таблицы с немножественными именами, и теперь, когда я внес некоторые изменения, я хочу вернуться обратно. Я хотел бы иметь возможность идти вперед и назад, поскольку ни модель db-first, ни модель-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

Я не смог найти ответ на эту проблему. Кроме того, у меня были проблемы с воссозданием этой проблемы, когда я не переключался между сценариями «сначала БД» и «сначала модели». Таким образом, я просто предполагаю, что обратная связь вызвала проблемы и является плохой ситуацией для прохождения EF.

29.04.2010
Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..