• 笔记-模型映射配置


    动态生成值
    无值生成
    要保存某个字段的值,先赋值,再将这个实体添加到上下文中。
    在添加时生成值
    客户端生成和数据库生成,如果是数据库生成,当你将实体添加到上下文时,EF 可能会赋予 一个临时值,然后,调用SaveChanges() 时,数据库生成的值会替换这个临时值。
    要特别说明的是:如果将一个属性被赋值的实体添加上下文时,不会生成新值,被赋值的认定 标准是未被属性赋予CLR 默认值,如:string 的默认值为 null,int 的默认值为 0, Guid.Empty 的默认值为 Guid。等等。
    约定
    类型为 short、int、long、或 Guid 的非复合主键会被设置在添加时生成值。 所有其他属性 会被设置为不生成值。
    Data Annotations
    不生成值 [DatabaseGenerated(DatabaseGeneratedOption.None)] public int BlogId { get; set; }
    在添加时生成值 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public DateTime Inserted { get; set; }
    在添加或更新时生成值 [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime LastUpdated { get; set; }
    使用 Computed 无法赋值,只能通过计算获得。
    Fluent API
    模型映射配置 2019年4月1日 23:43

    不生成值 modelBuilder.Entity<Blog>().Property(b => b.BlogId).ValueGeneratedNever();
    添加时生成值 modelBuilder.Entity<Blog>().Property(b => b.Inserted).ValueGeneratedOnAdd();
    添加或更新时生成值 modelBuilder.Entity<Blog>().Property(b => b.LastUpdated).ValueGeneratedOnAddOrUpdate();
    必填或可选属性
    数据库字段是否可空,取决于能否赋予一个属性NULL 值。
    约定
    其 CLR 类型可为 null 的属性将配置为可选 (string, int?, byte[],等等),其它反之。
    Data Annotations
    [Required] public string Url { get; set; }
    Fluent API
    modelBuilder.Entity<Blog>().Property(b => b.Url).IsRequired();
    最大长度限制
    最大长度仅适用于数组数据类型,如 string 和 byte[],超过指定长度,数据库将验证并抛出 异常。
    约定
    按照约定,数据库提供程序通常将选择允许最长数据长度的数据类型。nvarchar(max)
    Data Annotations
    [MaxLength(500)] public string Url { get; set; }
    Fluent API

    modelBuilder.Entity<Blog>().Property(b => b.Url).HasMaxLength(500);

  • 相关阅读:
    Consul常用命令
    ECharts 避免变窄
    TP3.2 日期默认格式
    新订单提示效果
    php 按照字典序排序 微信卡券签名算法用到
    td宽度自适应 窄的地方自动收缩
    git 删除本地分支,删除远程分支
    分页Model
    chrome表单自动填充如何取消
    tp3.2 如何比较两个字段
  • 原文地址:https://www.cnblogs.com/qingfenglin/p/13527794.html
Copyright © 2020-2023  润新知