如何使用Entity Framework 6 Code First连接已存在的SQL Server数据库

                   准备

创建控制程序并连接数据库

如何将外键关系转化为继承关系

备注


准备

若没有供实验的数据,可以使用Microsoft SQL Server Management Studio通过先创建一个本地数据库,如命名为ef-demo。再使用以下SQL创建一些数据表。

USE [ef-demo]
GO

CREATE TABLE [dbo].[Identities] (
    [Id] BIGINT NOT NULL,
    [NickName] NVARCHAR (200) NOT NULL,
    [PhoneNumber] NVARCHAR (200) NOT NULL,
    CONSTRAINT [PK_dbo.Identities] PRIMARY KEY CLUSTERED ([Id] ASC)
);
GO

CREATE TABLE [dbo].[People] (
    [Id] BIGINT NOT NULL,
    [FirstName] NVARCHAR (200) NOT NULL,
    [MiddleName] NVARCHAR (200),
    [LastName] NVARCHAR (200) NOT NULL,
    [Email] NVARCHAR (200),
    CONSTRAINT [PK_dbo.People] PRIMARY KEY CLUSTERED ([Id] ASC)
);
GO

ALTER TABLE [dbo].[People] WITH CHECK ADD CONSTRAINT [FK_dbo.Identities] FOREIGN KEY ([Id]) REFERENCES [dbo].[Identities] ([Id])
GO

ALTER TABLE [dbo].[People] CHECK CONSTRAINT [FK_dbo.Identities]
GO

 

创建控制程序并连接数据库

在VS2019中创建一个的.NET Framework 4.6控制台程序。右键点击新创建的工程,依次选择“Add“ --> "New Item...” --> "ADO.NET Entity Data Model" --> "Code First from database"。

如何使用Entity Framework 6 Code First连接已存在的SQL Server数据库_第1张图片

如何使用Entity Framework 6 Code First连接已存在的SQL Server数据库_第2张图片

如何使用Entity Framework 6 Code First连接已存在的SQL Server数据库_第3张图片

如何使用Entity Framework 6 Code First连接已存在的SQL Server数据库_第4张图片

如何使用Entity Framework 6 Code First连接已存在的SQL Server数据库_第5张图片

 

如何将外键关系转化为继承关系

当使用EF code first连接已经存在的数据库时,可以直接通过代码层面的修改来实现。

第一步,将VS中自动生成的Person.cs中的下述代码删除,并使Person继承于Identity。

[DatabaseGenerated(DatabaseGeneratedOption.None)]
public long Id { get; set; }

public virtual Identity Identity { get; set; }

第二步,将自动生成的Identity.cs中的下述代码删除。

public virtual Person Person { get; set; }

第三步,将自动生成的DemoEntities.cs中的OnModelCreating函数中的下述代码删除。

modelBuilder.Entity()
    .HasOptional(e => e.Person)
    .WithRequired(e => e.Identity);

第四步,在DemoEntities.cs的OnModelCreating函数中添加如下代码。

modelBuilder.Entity()
    .ToTable("People");

 

备注

如若存在继承关系的两张数据表中的主键名称不一致,可以利用EF flat API中的HasColumnName来进行适配。比如,Identities表的主键名为Id,而People表的主键为PersonId,则我们可以通过在DemoEntities.cs的OnModelCreating函数中添加如下代码来指定修改为继承关系后person.Id的值应出自何处。

modelBuilder.Entity()
    .Property(p => p.Id)
    .HasColumnName("PeronsonId");

 

你可能感兴趣的:(编程及调试)