ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

EF 6 新特性五

2022-01-24 09:33:31  阅读:205  来源: 互联网

标签:Description EF Posts 特性 Id DbContext public name


介绍

接下来我将给大家重点介绍一下.Net 6 之后的一些新的变更,文章都是来自于外国大佬的文章,我这边进行一个翻译,并加上一些自己的理解和解释。

源作者链接:https://blog.okyrylchuk.dev/entity-framework-core-6-features-part-2

正文

脚手架可为空的引用类型

EF Core 6.0 改进了现有数据库的脚手架。在项目中启用可空引用类型 (NRT) 时,EF Core 会自动使用 NRT 构建 DbContext 和实体类型。

有示例表:

CREATE TABLE [Posts] (
    [Id] int NOT NULL IDENTITY,
    [Name] nvarchar(max) NOT NULL,
    [Description] nvarchar(max) NULL,
    CONSTRAINT [PK_Posts] PRIMARY KEY ([Id])
)

生成的模型:

    public partial class Post
    {
        public int Id { get; set; }
        public string Name { get; set; } = null!;
        public string? Desciption { get; set; }
    }

脚手架数据库评论

EF Core 6.0 将数据库注释构建为代码注释。

有示例数据库:

CREATE TABLE [Posts] (
    [Id] int NOT NULL IDENTITY,
    [Name] nvarchar(max) NOT NULL,
    [Description] nvarchar(max) NULL,
    CONSTRAINT [PK_Posts] PRIMARY KEY ([Id]));
EXEC sp_addextendedproperty 
    @name = N'MS_Description', @value = 'The post table',
    @level0type = N'Schema', @level0name = dbo, 
    @level1type = N'Table',  @level1name = Posts
EXEC sp_addextendedproperty 
    @name = N'MS_Description', @value = 'The post identifier',
    @level0type = N'Schema', @level0name = dbo, 
    @level1type = N'Table',  @level1name = Posts, 
    @level2type = N'Column', @level2name = [Id];
EXEC sp_addextendedproperty 
    @name = N'MS_Description', @value = 'The post name',
    @level0type = N'Schema', @level0name = dbo, 
    @level1type = N'Table',  @level1name = Posts, 
    @level2type = N'Column', @level2name = [Name];
EXEC sp_addextendedproperty 
    @name = N'MS_Description', @value = 'The description name',
    @level0type = N'Schema', @level0name = dbo, 
    @level1type = N'Table',  @level1name = Posts, 
    @level2type = N'Column', @level2name = [Description];

生成的模型:

/// <summary>
/// The post table
/// </summary>
public partial class Post
{
    /// <summary>
    /// The post identifier
    /// </summary>
    public int Id { get; set; }
    /// <summary>
    /// The post name
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// The description name
    /// </summary>
    public string Description { get; set; }
}

AddDbContextFactory 注册 DbContext

在 EF Core 5.0 中,您可以注册一个工厂以手动创建DbContext实例。从 EF Core 6.0 开始, AddDbContextFactory 还注册DbContext。因此,您可以根据需要同时注入工厂和DbContext 。

var serviceProvider = new ServiceCollection()
        .AddDbContextFactory<ExampleContext>(builder => 
            builder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database = EFCore6Playground")) 
        .BuildServiceProvider();

var factory = serviceProvider.GetService<IDbContextFactory<ExampleContext>>();
using (var context = factory.CreateDbContext())
{
    // Contexts obtained from the factory must be explicitly disposed
}

using (var scope = serviceProvider.CreateScope())
{
    var context = scope.ServiceProvider.GetService<ExampleContext>();
    // Context is disposed when the scope is disposed
}
class ExampleContext : DbContext
{ }

结语

联系作者:加群:867095512 @MrChuJiu

公众号

标签:Description,EF,Posts,特性,Id,DbContext,public,name
来源: https://www.cnblogs.com/MrChuJiu/p/15838193.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有