EFcore笔记之创建模型

排除属性:NotMapped

NotMapped:排除属性在CodeFirst的时候在数据库里不创建该属性

 
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    [NotMapped]
    public DateTime LoadedFromDatabase { get; set; }
}

  

主键设置,最大长度

按照约定,属性名为 Id 或 者包含“Id"("CarId")的会配置为实体的键。

例如

 public int CarId{ get; set; }

可以使用“ [Key]”将单个属性配置为实体的键。

class Car
{
    [Key]
    public string LicensePlate { get; set; }
    [MaxLength(500)] //最大长度
    public string Make { get; set; }
    public string Model { get; set; }
}

 值生成模式 丶必须属性 数据注释方式

  • 无值生成:必须在add数据的时候该项必须赋值(需始终提供要保存到数据库的有效值。 必须先将有效的值赋予新的实体,再将这些新的实体添加到上下文中)。
  • 在添加时生成值:在添加时生成值,有客户端生产值,或者由数据库生成。
  • 在添加或更新时生成值:在添加或更新时生成值,意味着在每次保存该记录(插入或更新)时生成新值。
    public class Blog
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)] //无值生成
        public int BlogId { get; set; }
    [Required]//必须
    public string Url { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] //在添加时生成值
    public DateTime Inserted { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Computed)] //在添加或更新时生成值 public DateTime LastUpdated { get; set; } }

     

    并发标记 丶隐藏属性

  • 属性配置为并发标记用于实现乐观并发控制。https://docs.microsoft.com/zh-cn/ef/core/saving/concurrency 暂时未用到具体如何实现并发控制
  • public class Person
    {
        public int PersonId { get; set; }
    
        [ConcurrencyCheck]
        public string LastName { get; set; }
    
        public string FirstName { get; set; }
    }

          隐藏属性又叫阴影属性,这个属性的作用就是在数据库表里面 LastUpdateTime的值为null的时候,不应在映射的实体类型公开数据库中没有数据时,卷影属性非常有用。这时微软的解释,如何配置数据注释并没有标明如何注释 可以使用Fluent API配置

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property<DateTime>("LastUpdated");
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

 关系:https://docs.microsoft.com/zh-cn/ef/core/modeling/relationships

   索引

     利用FluentApI创建索引 

class MyContext : DbContext
{
    public DbSet<Person> People { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>()
            .HasIndex(p => new { p.FirstName, p.LastName }); //多个列指定一个索引。
//modelBuilder.Entity<Blog>() .HasIndex(b => b.Url); //单个属性指定索引
//modelBuilder.Entity<Blog>() .HasIndex(b => b.Url) .IsUnique(); //此外可以指定索引应是唯一的这意味着任何两个实体可以具有给定属性的相同值。
    }
}

public class Person
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

 

备用键

     官方文档解释:备用键与主键相对,用作每个实体实例的备用唯一标识符。 备用键可用作关系的目标。 使用关系数据库时,这将映射到备用键列上的唯一索引/约束和引用列的一个或多个外键约束的概念。

 

利用FluentApi进行配置

class MyContext : DbContext
{
    public DbSet<Car> Cars { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Car>()
            .HasAlternateKey(c => c.LicensePlate);
//modelBuilder.Entity<Car>()
.HasAlternateKey(c => new { c.State, c.LicensePlate });//可用于配置要作为备用键 (称为复合的备用键) 的多个属性。 } }
class Car { public int CarId { get; set; } public string LicensePlate { get; set; } public string Make { get; set; } public string Model { get; set; } }

 

 

转载于:https://www.cnblogs.com/MasterLin/p/10249019.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值