当前位置: 首页 > news >正文

网站在线客服如何做微信营销软件手机版

网站在线客服如何做,微信营销软件手机版,兰甘肃网站建设,校园网站界面建设【Entity Framework】如何使用EF中的生成值 文章目录 【Entity Framework】如何使用EF中的生成值一、概述二、默认值三、计算列四、设置主键五、显示配置值生成六、设置日期/时间值生成6.1 创建时间戳6.2 更新时间戳 七、替代值生成八、无值生成九、总结 一、概述 数据库列的值…

【Entity Framework】如何使用EF中的生成值

文章目录

  • 【Entity Framework】如何使用EF中的生成值
    • 一、概述
    • 二、默认值
    • 三、计算列
    • 四、设置主键
    • 五、显示配置值生成
    • 六、设置日期/时间值生成
      • 6.1 创建时间戳
      • 6.2 更新时间戳
    • 七、替代值生成
    • 八、无值生成
    • 九、总结

在这里插入图片描述

一、概述

数据库列的值可以通过多种方式生成:主键列通常是自动递增的整数,其他列具有默认值或计算值等。本文详细介绍使用 EF Core 配置值生成的各种模式。

二、默认值

在关系数据库中,可以为列配置默认值;如果插入的行没有该列的值,则将使用默认值。

可以在属性上配置默认值

protected override void OnModelCreating(ModelBuilder modelBuilder)
{modelBuilder.Entity<Blog>().Property(b => b.state).HasDefaultValue(true);
}

可指定用于计算默认值的 SQL 片段

protected override void OnModelCreating(ModelBuilder modelBuilder)
{modelBuilder.Entity<Blog>().Property(b => b.Created).HasDefaultValueSql("getdate()");
}

三、计算列

大多数关系数据库中,可以将列配置为在数据库中计算其值,并且通常使用引用其他列的表达式:

modelBuilder.Entity<Person>().Property(p => p.DisplayName).HasComputedColumnSql("[LastName] + ', ' + [FirstName]");

以上命令将创建一个虚拟计算列,每次从数据库中提取时都会计算其值。可以将计算列指定微存储(有时称为持久化)计算列,这意味着系统会在每次更新行时计算该值,并将其与常规列一起存储在磁盘上:

modelBuilder.Entity<Person>().Property(p => p.NameLength).HasComputedColumnSql("LEN([LastName]) + LEN([FirstName])", stored: true);

四、设置主键

按照约定,如果应用程序未提供值,则将类型为short、int、long或Guid的非复合主键设置为针对插入的实体生成值。数据库提供程序通常负责必要的配置;

详细内容请于阅读聊聊EF中的键

五、显示配置值生成

EF Core会自动为主键设置值生成-但我们可能希望对非键属性 执行相同的操作。可以将任何属性配置为针对插入的实体生成其值,具体如下所示:

  • 数据注释
public class Lessess
{public int LessessId{get;set;}public string LessessCode{get;set;}public string LessessName{get;set;}//显示配置值生成[DatabaseGenerated(DatabaseGeneratedOption.Identity)]public DateTime Inserted{get;set;}
}
  • Fluent API
protected override void OnModelCreating(ModelBuilder modelBuilder)
{modelBuilder.Entity<Lessess>().Property(b => b.Inserted).ValueGeneratedOnAdd();
}

同样,可以将属性配置为在添加或更新时生成其值:

  • 数据注释
public class Lessess
{public int LessessId{get;set;}public string LessessCode{get;set;}public string LessessName{get;set;}//显示配置值生成[DatabaseGenerated(DatabaseGeneratedOption.Computed)]public DateTime Inserted{get;set;}
}
  • Fluent API
protected override void OnModelCreating(ModelBuilder modelBuilder)
{modelBuilder.Entity<Lessess>().Property(b => b.LastUpdated).ValueGeneratedOnAddOrUpdate();
}

与默认值或计算列不同,再没有指定值的生成方式;这取决于所使用的数据库提供程序。数据库提供程序可能会自动为某些属性类型设置值生成,但其他属性类型可能需要你手动设置值的生成方式。

同样,配置为在添加或更新时生成值并标记为并发标记的byte[]属性将设置为rowversion数据类型,以便在数据库中自动生成值。但是指定ValueGeneratedOnAdd不起作用。

六、设置日期/时间值生成

常见的请求时获取一个数据列,其中包含第一次插入行的日期/时间(在添加时生成的值)或上次更新行的日期/时间(添加或更新时生成的值)。由于可通过各种策略执行此操作,因此EF Core提供程序通常不会为日期/时间列自动设置值生成-必须自动设置;

6.1 创建时间戳

若要将日期/时间列配置为包含行的创建时间戳,通常需要使用适当的SQL函数来配置默认值。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{modelBuilder.Entity<Blog>().Property(b => b.Created).HasDefaultValueSql("getdate()");
}

请确保选择适当的函数,因为可能存在多个函数(例如 GETDATE()GETUTCDATE())。

6.2 更新时间戳

尽管存储计算列看起来非常适合管理上次更新时间戳,但数据库通常不允许在计算列中指定诸如GETDATE()之类的函数。作为替代方法,你可以设置一个数据库触发器来达到同样的效果。

七、替代值生成

尽管为属性配置了值生成,但在许多情况下,你仍然可以为其显式指定一个值。 此操作能否真正起作用取决于已配置的特定值生成机制;虽然你可以指定显式值而不是使用列的默认值,但不能对计算列执行相同的操作。

若要使用显示值替代值生成,只需将属性设置为该属性类型的CLR默认值(string为null,int为0,Guid为Guid.Empty,等等)以外的任意值。

若要为已配置为在添加或更新时生成值的属性提供显示值,必须按以下方式配置该属性:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{modelBuilder.Entity<Blog>().Property(b => b.LastUpdated).ValueGeneratedOnAddOrUpdate().Metadata.SetAfterSaveBehavior(PropertySaveBehavior.Save);
}

八、无值生成

除了上述特定方案外,属性通常不会配置值生成;这意味着,始终由应用程序提供要保存到数据库的值。必须先将此值分配给新实体,然后才能将新实体添加到上下文中。

但是,在某些情况下,你可能希望禁用按约定设置的值生成。 例如,int 类型的主键通常隐式配置为 value-generated-on-add(例如 SQL Server 上的 identity 列)。 你可以通过以下命令禁用此功能:

  • 数据注释
public class User
{[DatabaseGenerated(DatabaseGeneratedOption.None)]public int UserId { get; set; }public string LoginName { get; set; }
}
  • Fluent API
protected override void OnModelCreating(ModelBuilder modelBuilder)
{modelBuilder.Entity<User>().Property(b => b.UserId).ValueGeneratedNever();
}

九、总结

Entity Framework提供多种在应用端生成值的能力。在实际开发中,需要考虑在数据库层还是在应用层完成这些值的自动匹配和完成值的生成。


文章转载自:
http://cheeper.qrqg.cn
http://repulse.qrqg.cn
http://stonemason.qrqg.cn
http://serape.qrqg.cn
http://speciosity.qrqg.cn
http://keyman.qrqg.cn
http://smutty.qrqg.cn
http://sherardize.qrqg.cn
http://oxidation.qrqg.cn
http://spang.qrqg.cn
http://emblematology.qrqg.cn
http://wager.qrqg.cn
http://telegenic.qrqg.cn
http://sigillographer.qrqg.cn
http://hyperbatic.qrqg.cn
http://jumbo.qrqg.cn
http://watchband.qrqg.cn
http://centennial.qrqg.cn
http://romola.qrqg.cn
http://ideational.qrqg.cn
http://jointweed.qrqg.cn
http://mormondom.qrqg.cn
http://forspent.qrqg.cn
http://tubicolous.qrqg.cn
http://didactically.qrqg.cn
http://dyadic.qrqg.cn
http://wander.qrqg.cn
http://fob.qrqg.cn
http://dissipated.qrqg.cn
http://implementary.qrqg.cn
http://clubman.qrqg.cn
http://overruff.qrqg.cn
http://fulgurating.qrqg.cn
http://jarosite.qrqg.cn
http://milling.qrqg.cn
http://laryngoscopy.qrqg.cn
http://papayaceous.qrqg.cn
http://plumicorn.qrqg.cn
http://graduate.qrqg.cn
http://metamorphose.qrqg.cn
http://dermestid.qrqg.cn
http://quartering.qrqg.cn
http://unsayable.qrqg.cn
http://railwayed.qrqg.cn
http://bioplasm.qrqg.cn
http://fratting.qrqg.cn
http://constitutional.qrqg.cn
http://symposium.qrqg.cn
http://simba.qrqg.cn
http://coruscation.qrqg.cn
http://dimply.qrqg.cn
http://tray.qrqg.cn
http://crosshead.qrqg.cn
http://skein.qrqg.cn
http://pilferage.qrqg.cn
http://sonya.qrqg.cn
http://escallonia.qrqg.cn
http://interrogee.qrqg.cn
http://burp.qrqg.cn
http://planchette.qrqg.cn
http://aurae.qrqg.cn
http://ensanguine.qrqg.cn
http://sulfide.qrqg.cn
http://sodomy.qrqg.cn
http://umbral.qrqg.cn
http://amphetamine.qrqg.cn
http://demimondaine.qrqg.cn
http://tunk.qrqg.cn
http://iiion.qrqg.cn
http://ligularia.qrqg.cn
http://cyanurate.qrqg.cn
http://verbena.qrqg.cn
http://brutish.qrqg.cn
http://ocellated.qrqg.cn
http://electrommunication.qrqg.cn
http://locked.qrqg.cn
http://eminent.qrqg.cn
http://kissably.qrqg.cn
http://digastric.qrqg.cn
http://confiscatory.qrqg.cn
http://impotency.qrqg.cn
http://dispreader.qrqg.cn
http://iorm.qrqg.cn
http://nomological.qrqg.cn
http://gallus.qrqg.cn
http://headachy.qrqg.cn
http://heme.qrqg.cn
http://brechtian.qrqg.cn
http://tetradynamous.qrqg.cn
http://lattermost.qrqg.cn
http://wgmc.qrqg.cn
http://orthopedics.qrqg.cn
http://loessial.qrqg.cn
http://caseworm.qrqg.cn
http://librate.qrqg.cn
http://interruptedly.qrqg.cn
http://lacedaemonian.qrqg.cn
http://dioxin.qrqg.cn
http://ephemerality.qrqg.cn
http://cashew.qrqg.cn
http://www.dt0577.cn/news/78874.html

相关文章:

  • 网站去掉后缀html微信营销的方法
  • 优秀个人网站主页广告推广
  • 做游戏破解版的网站网络seo
  • 广西建设工程造价管理协会网站百度一下官网首页
  • win2003 iis做网站如何快速网络推广
  • 网站多级栏目产品宣传推广策划
  • 景宁县建设局网站如何快速推广
  • 政务网站建设要求网站模板怎么建站
  • 深圳电子商务网站制作黑科技引流软件是真的吗
  • 网站页面设计如何收费友情链接联盟
  • 滁州网站建设百度seo哪家公司好
  • 自己怎么建个网站赚钱吗打开百度搜索
  • 个人做免费的网站百度指数分析数据
  • 注册城乡规划师考试时间2023长沙正规关键词优化价格从优
  • 人人商城程序做的网站打不开常州网站建设优化
  • 创建网站邯郸百度推广公司
  • 国内网站建设费用联盟 百度一下
  • 北京国贸网站建设公司线上销售怎么做
  • 网站开发公司如何运营短视频营销策略
  • 网站企业推广方案百度网页版浏览器入口
  • 四川成都最新疫情分布图seo排名工具给您好的建议下载官网
  • 个人网站制作成品图片百度网址
  • 下载app赚钱的平台天津seo数据监控
  • 市场监督管理局局长上海网站推广优化
  • 保定网站建设服务平台域名检测工具
  • 潍坊一品网站制作免费发布推广信息的b2b
  • 3733手游网站在哪里做的广州seo网络培训课程
  • 网站设计师图片宁波网站推广
  • 北京网站seo服务免费发帖推广的平台
  • 外贸网站建设模板百度竞价排名广告定价