Entity Framework Core-配置

为了允许我们以自己的方式来创建数据库schema和映射关系,我们需要重写EF Core 默认契约,我们已经了解默认EF Core契约是如何工作的,如果我们想重写契约需要修改配置和领域类到数据库的映射

EF Core 有两种配置方法:

1 Data Annotation Attributes

2 Fluent API

1 Data Annotation Attributes

这些.NET特性能被应用到领域类的属性中,这些特性包含在单独的命名空间中System.ComponentModel.DataAnnotations

让我们通过一个例子来了解如何在领域类内使用Data Annotation 特性配置数据库表和重写默认契约在EF Core

在下面代码中我们给到2个领域类的属性提交Data Annotation Attributes (Country & City)

[Table("TBL_City")]
public class City
{
    [Key]
    public int KeyId { get; set; }
    [Column("CityName", TypeName = "varchar(25)")]
    public string Name { get; set; }
    [NotMapped]
    public int Population { get; set; }
    [ForeignKey("FKid")]
    public Country Country { get; set; } 
}


[Table("TBL_Country")]
public class Country
{
    [Key]
    public int KeyId { get; set; }
    [MaxLength(20)]
    public string Name { get; set; }
}

由于在类上使用了[Table("Name")] 特性,当我们运行EF Core Migration 数据库将会创建两张表,这些表是: 

1 TBL_City

2 TBL_Country

在视图的输入项中我们广泛应用了Data Annotation Attributes

TBL_City表:

1 KeyId 列作为主键

2 CityName 列使用了 varchar(25)类型

3  FKid 列作为外键

常用[NotMapped]特性告诉EF Core不会在TBL_City表中创建列

TBL_Country 表:

1 KeyId列作为主键

2 Name 列使用了类型 nvarchar(20)

下面图片显示了数据库中两张表

EF Core Data Annotations

特性描述
Table实体类映射到数据库中表的名称
Column

属性映射到在表的列名称、顺序和数据类型

Key设置属性作为表的主键
ForeignKey将一个属性标记为外键
NotMapped不会在数据库的表中生成该属性对应的列
MaxLength为表列设置最大值
Required指定该属性在表中对应的列不能为空

2 Fluent API

可以使用EF Core Fluent API配置领域类,接下我们会写4篇文章来了解Fluent API

总结

这节我们主要学习使用Data Annotation Attributes重写默认契约

源代码地址:

https://github.com/bingbing-gui/Asp.Net-Core-Skill/tree/master/EntityFrameworkCore/EFCoreConfiguration

参考资料

https://learn.microsoft.com/en-us/ef/core/modeling/entity-types?tabs=data-annotations

https://learn.microsoft.com/en-us/ef/core/modeling/entity-properties?tabs=data-annotations%2Cwithout-nrt

https://learn.microsoft.com/en-us/ef/core/modeling/keys?tabs=data-annotations

https://www.yogihosting.com/configurations-entity-framework-core/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值