0

私は初心者で、EntityFramework4.1のモデリングツールの実験を始めたばかりです。

写真は私のデータベースの図を示しており、さらにその下には、データベース(SQL Server 2008)を作成するための自動生成されたスクリプトがあります。

ここに画像の説明を入力してください

-- --------------------------------------------------
-- Entity Designer DDL Script for SQL Server 2005, 2008, and Azure
-- --------------------------------------------------
-- Date Created: 06/25/2012 21:49:52
-- Generated from EDMX file: D:\Libraries\Documents\Visual Studio 2010\HomeControl\DAL\HomeControlModel.edmx
-- --------------------------------------------------

SET QUOTED_IDENTIFIER OFF;
GO
USE [HomeControl];
GO
IF SCHEMA_ID(N'dbo') IS NULL EXECUTE(N'CREATE SCHEMA [dbo]');
GO

-- --------------------------------------------------
-- Dropping existing FOREIGN KEY constraints
-- --------------------------------------------------

IF OBJECT_ID(N'[dbo].[FK_CameraImage]', 'F') IS NOT NULL
    ALTER TABLE [dbo].[ImageSet] DROP CONSTRAINT [FK_CameraImage];
GO
IF OBJECT_ID(N'[dbo].[FK_EventTypeAction]', 'F') IS NOT NULL
    ALTER TABLE [dbo].[ActionSet] DROP CONSTRAINT [FK_EventTypeAction];
GO
IF OBJECT_ID(N'[dbo].[FK_UnitAction]', 'F') IS NOT NULL
    ALTER TABLE [dbo].[ActionSet] DROP CONSTRAINT [FK_UnitAction];
GO
IF OBJECT_ID(N'[dbo].[FK_UserAction]', 'F') IS NOT NULL
    ALTER TABLE [dbo].[ActionSet] DROP CONSTRAINT [FK_UserAction];
GO
IF OBJECT_ID(N'[dbo].[FK_ScheduleUser]', 'F') IS NOT NULL
    ALTER TABLE [dbo].[UserSet] DROP CONSTRAINT [FK_ScheduleUser];
GO
IF OBJECT_ID(N'[dbo].[FK_UnitCommand]', 'F') IS NOT NULL
    ALTER TABLE [dbo].[CommandSet] DROP CONSTRAINT [FK_UnitCommand];
GO
IF OBJECT_ID(N'[dbo].[FK_Camera_inherits_Unit]', 'F') IS NOT NULL
    ALTER TABLE [dbo].[UnitSet_Camera] DROP CONSTRAINT [FK_Camera_inherits_Unit];
GO
IF OBJECT_ID(N'[dbo].[FK_Tellstick_inherits_Unit]', 'F') IS NOT NULL
    ALTER TABLE [dbo].[UnitSet_Tellstick] DROP CONSTRAINT [FK_Tellstick_inherits_Unit];
GO

-- --------------------------------------------------
-- Dropping existing tables
-- --------------------------------------------------

IF OBJECT_ID(N'[dbo].[UserSet]', 'U') IS NOT NULL
    DROP TABLE [dbo].[UserSet];
GO
IF OBJECT_ID(N'[dbo].[ActionTypeSet]', 'U') IS NOT NULL
    DROP TABLE [dbo].[ActionTypeSet];
GO
IF OBJECT_ID(N'[dbo].[UnitSet]', 'U') IS NOT NULL
    DROP TABLE [dbo].[UnitSet];
GO
IF OBJECT_ID(N'[dbo].[ImageSet]', 'U') IS NOT NULL
    DROP TABLE [dbo].[ImageSet];
GO
IF OBJECT_ID(N'[dbo].[ScheduleSet]', 'U') IS NOT NULL
    DROP TABLE [dbo].[ScheduleSet];
GO
IF OBJECT_ID(N'[dbo].[ActionSet]', 'U') IS NOT NULL
    DROP TABLE [dbo].[ActionSet];
GO
IF OBJECT_ID(N'[dbo].[CommandSet]', 'U') IS NOT NULL
    DROP TABLE [dbo].[CommandSet];
GO
IF OBJECT_ID(N'[dbo].[UnitSet_Camera]', 'U') IS NOT NULL
    DROP TABLE [dbo].[UnitSet_Camera];
GO
IF OBJECT_ID(N'[dbo].[UnitSet_Tellstick]', 'U') IS NOT NULL
    DROP TABLE [dbo].[UnitSet_Tellstick];
GO

-- --------------------------------------------------
-- Creating all tables
-- --------------------------------------------------

-- Creating table 'UserSet'
CREATE TABLE [dbo].[UserSet] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [Name] nvarchar(max)  NOT NULL,
    [Schedule_Id] int  NOT NULL
);
GO

-- Creating table 'ActionTypeSet'
CREATE TABLE [dbo].[ActionTypeSet] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [Name] nvarchar(max)  NOT NULL
);
GO

-- Creating table 'UnitSet'
CREATE TABLE [dbo].[UnitSet] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [Name] nvarchar(max)  NOT NULL
);
GO

-- Creating table 'ImageSet'
CREATE TABLE [dbo].[ImageSet] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [Description] nvarchar(max)  NULL,
    [Data] varbinary(max)  NOT NULL,
    [Camera_Id] int  NOT NULL
);
GO

-- Creating table 'ScheduleSet'
CREATE TABLE [dbo].[ScheduleSet] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [OneOff] datetime  NULL,
    [Cronexpression] nvarchar(max)  NULL
);
GO

-- Creating table 'ActionSet'
CREATE TABLE [dbo].[ActionSet] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [Time] datetime  NOT NULL,
    [Description] nvarchar(max)  NOT NULL,
    [EventType_Id] int  NOT NULL,
    [Unit_Id] int  NOT NULL,
    [User_Id] int  NOT NULL
);
GO

-- Creating table 'CommandSet'
CREATE TABLE [dbo].[CommandSet] (
    [Id] int IDENTITY(1,1) NOT NULL,
    [Description] nvarchar(max)  NOT NULL,
    [Unit_Id] int  NOT NULL
);
GO

-- Creating table 'UnitSet_Camera'
CREATE TABLE [dbo].[UnitSet_Camera] (
    [Login] nvarchar(max)  NOT NULL,
    [Password] nvarchar(max)  NOT NULL,
    [URL] nvarchar(max)  NOT NULL,
    [Id] int  NOT NULL
);
GO

-- Creating table 'UnitSet_Tellstick'
CREATE TABLE [dbo].[UnitSet_Tellstick] (
    [Id] int  NOT NULL
);
GO

-- --------------------------------------------------
-- Creating all PRIMARY KEY constraints
-- --------------------------------------------------

-- Creating primary key on [Id] in table 'UserSet'
ALTER TABLE [dbo].[UserSet]
ADD CONSTRAINT [PK_UserSet]
    PRIMARY KEY CLUSTERED ([Id] ASC);
GO

-- Creating primary key on [Id] in table 'ActionTypeSet'
ALTER TABLE [dbo].[ActionTypeSet]
ADD CONSTRAINT [PK_ActionTypeSet]
    PRIMARY KEY CLUSTERED ([Id] ASC);
GO

-- Creating primary key on [Id] in table 'UnitSet'
ALTER TABLE [dbo].[UnitSet]
ADD CONSTRAINT [PK_UnitSet]
    PRIMARY KEY CLUSTERED ([Id] ASC);
GO

-- Creating primary key on [Id] in table 'ImageSet'
ALTER TABLE [dbo].[ImageSet]
ADD CONSTRAINT [PK_ImageSet]
    PRIMARY KEY CLUSTERED ([Id] ASC);
GO

-- Creating primary key on [Id] in table 'ScheduleSet'
ALTER TABLE [dbo].[ScheduleSet]
ADD CONSTRAINT [PK_ScheduleSet]
    PRIMARY KEY CLUSTERED ([Id] ASC);
GO

-- Creating primary key on [Id] in table 'ActionSet'
ALTER TABLE [dbo].[ActionSet]
ADD CONSTRAINT [PK_ActionSet]
    PRIMARY KEY CLUSTERED ([Id] ASC);
GO

-- Creating primary key on [Id] in table 'CommandSet'
ALTER TABLE [dbo].[CommandSet]
ADD CONSTRAINT [PK_CommandSet]
    PRIMARY KEY CLUSTERED ([Id] ASC);
GO

-- Creating primary key on [Id] in table 'UnitSet_Camera'
ALTER TABLE [dbo].[UnitSet_Camera]
ADD CONSTRAINT [PK_UnitSet_Camera]
    PRIMARY KEY CLUSTERED ([Id] ASC);
GO

-- Creating primary key on [Id] in table 'UnitSet_Tellstick'
ALTER TABLE [dbo].[UnitSet_Tellstick]
ADD CONSTRAINT [PK_UnitSet_Tellstick]
    PRIMARY KEY CLUSTERED ([Id] ASC);
GO

-- --------------------------------------------------
-- Creating all FOREIGN KEY constraints
-- --------------------------------------------------

-- Creating foreign key on [Camera_Id] in table 'ImageSet'
ALTER TABLE [dbo].[ImageSet]
ADD CONSTRAINT [FK_CameraImage]
    FOREIGN KEY ([Camera_Id])
    REFERENCES [dbo].[UnitSet_Camera]
        ([Id])
    ON DELETE NO ACTION ON UPDATE NO ACTION;

-- Creating non-clustered index for FOREIGN KEY 'FK_CameraImage'
CREATE INDEX [IX_FK_CameraImage]
ON [dbo].[ImageSet]
    ([Camera_Id]);
GO

-- Creating foreign key on [EventType_Id] in table 'ActionSet'
ALTER TABLE [dbo].[ActionSet]
ADD CONSTRAINT [FK_EventTypeAction]
    FOREIGN KEY ([EventType_Id])
    REFERENCES [dbo].[ActionTypeSet]
        ([Id])
    ON DELETE NO ACTION ON UPDATE NO ACTION;

-- Creating non-clustered index for FOREIGN KEY 'FK_EventTypeAction'
CREATE INDEX [IX_FK_EventTypeAction]
ON [dbo].[ActionSet]
    ([EventType_Id]);
GO

-- Creating foreign key on [Unit_Id] in table 'ActionSet'
ALTER TABLE [dbo].[ActionSet]
ADD CONSTRAINT [FK_UnitAction]
    FOREIGN KEY ([Unit_Id])
    REFERENCES [dbo].[UnitSet]
        ([Id])
    ON DELETE NO ACTION ON UPDATE NO ACTION;

-- Creating non-clustered index for FOREIGN KEY 'FK_UnitAction'
CREATE INDEX [IX_FK_UnitAction]
ON [dbo].[ActionSet]
    ([Unit_Id]);
GO

-- Creating foreign key on [User_Id] in table 'ActionSet'
ALTER TABLE [dbo].[ActionSet]
ADD CONSTRAINT [FK_UserAction]
    FOREIGN KEY ([User_Id])
    REFERENCES [dbo].[UserSet]
        ([Id])
    ON DELETE NO ACTION ON UPDATE NO ACTION;

-- Creating non-clustered index for FOREIGN KEY 'FK_UserAction'
CREATE INDEX [IX_FK_UserAction]
ON [dbo].[ActionSet]
    ([User_Id]);
GO

-- Creating foreign key on [Schedule_Id] in table 'UserSet'
ALTER TABLE [dbo].[UserSet]
ADD CONSTRAINT [FK_ScheduleUser]
    FOREIGN KEY ([Schedule_Id])
    REFERENCES [dbo].[ScheduleSet]
        ([Id])
    ON DELETE NO ACTION ON UPDATE NO ACTION;

-- Creating non-clustered index for FOREIGN KEY 'FK_ScheduleUser'
CREATE INDEX [IX_FK_ScheduleUser]
ON [dbo].[UserSet]
    ([Schedule_Id]);
GO

-- Creating foreign key on [Unit_Id] in table 'CommandSet'
ALTER TABLE [dbo].[CommandSet]
ADD CONSTRAINT [FK_UnitCommand]
    FOREIGN KEY ([Unit_Id])
    REFERENCES [dbo].[UnitSet]
        ([Id])
    ON DELETE NO ACTION ON UPDATE NO ACTION;

-- Creating non-clustered index for FOREIGN KEY 'FK_UnitCommand'
CREATE INDEX [IX_FK_UnitCommand]
ON [dbo].[CommandSet]
    ([Unit_Id]);
GO

-- Creating foreign key on [Id] in table 'UnitSet_Camera'
ALTER TABLE [dbo].[UnitSet_Camera]
ADD CONSTRAINT [FK_Camera_inherits_Unit]
    FOREIGN KEY ([Id])
    REFERENCES [dbo].[UnitSet]
        ([Id])
    ON DELETE NO ACTION ON UPDATE NO ACTION;
GO

-- Creating foreign key on [Id] in table 'UnitSet_Tellstick'
ALTER TABLE [dbo].[UnitSet_Tellstick]
ADD CONSTRAINT [FK_Tellstick_inherits_Unit]
    FOREIGN KEY ([Id])
    REFERENCES [dbo].[UnitSet]
        ([Id])
    ON DELETE NO ACTION ON UPDATE NO ACTION;
GO

-- --------------------------------------------------
-- Script has ended
-- --------------------------------------------------

私の質問は、Entity Framework自体ではなく、単純なSQL構文です。

私のモデルでは、CameraエンティティはUnitから継承しています。次のようなカメラテーブルINSERTを作成したいと思います。

INSERT INTO UnitSet_Camera
       (Login,
        Password,
        URL)
 VALUES
       ('myLoginName'
       ,'myPassword'
       ,'http://foo.bar:007');

また、 Cameraエンティティに「Name」を指定する必要があるため(テーブルUnitとそのプロパティ「Name」からの継承のため) 、これが不完全であることもわかっています。

完全なSQLステートメントは任意のCameraエンティティをどのINSERTように探す必要がありますか?

4

1 に答える 1

1

継承であるため、2つのテーブルがあります。UnitSetには、派生クラスで参照されるIDENTITYがあります。基本的にこれを行う必要があります:

INSERT INTO dbo.UnitSet (Name) VALUES ('The Name');
INSERT INTO UnitSet_Camera
       (Login,
        Password,
        URL,
        Id)
 VALUES
       ('myLoginName'
       ,'myPassword'
       ,'http://foo.bar:007'
       ,SCOPE_IDENTITY());

ただし、1つのステートメントでそれを実行するOUTPUTのような他の機能があります。または、カメラのすべてのプロパティを公開するビューを作成し、トリガーを使用して更新可能にすることもできます。

しかし、この種の操作を行うためにORMを実行することを明らかに決定したのに、なぜSQLを介してこれを実行したいのか疑問に思います。

于 2012-06-25T20:27:03.507 に答える