首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

EntityFramework Core 学习扫盲

主键 默认情况下,EF CORE会将实体中命名为Id或者[TypeName]Id属性映射为数据库表中主键。当然有些开发者不喜欢将主键命名为Id,EF CORE也提供了两种方式进行主键相关设置。...生成 前文中已经介绍过,假如属性被命名为Id/[TypeName]Id形式,EF CORE会将该属性设置为主键。...默认 默认与计算定义十分相似,只是计算无法由用户手动输入。而默认值更多指的是当用户不手动输入时,使用默认进行数据库相应列填充。...备用键 备用键在之前小节中已经提过,使用以下代码配置将自动设置为唯一标识。...,HasValue提供新增或修改实体时,根据实体类型将不同标识自动写入标识中。

9.5K90
您找到你想要的搜索结果了吗?
是的
没有找到

.NET EF Core(Entity Framework Core)

乐观并发控制:并发令牌 Update T_Houses set Owner=新 where Id=1 and Owner=旧 当Update时候,如果数据库中Owner已经被其他操作者更新为其他值了...,然后使用IsRowVersion()把这个属性设置为RowVersion类型,这样这个属性对应数据库就会被设置为ROWVERSION类型。...对于ROWVERSION类型,在每次插入或更新行时,数据库会自动为这一行ROWVERSION类型其生成新。...总结:如果有一个确定字段要被进行并发控制,那么使用IsConcurrencyToken()把这个字段设置为并发令牌即可;如果无法确定一个唯一并发令牌,那么就可以引入一个额外属性设置为并发令牌,并且在每次更新数据时候...,手动更新这一

9711

C#asyncawait 结构

(3)返回类型:只能返回 3 种类型(void、Task 和 Task)。Task 和 Task 标识返回对象会在将来完成工作,表示调用方法和异步方法可以继续执行。...async/await 结构 现在先来简单分析一下这三种返回类型:void、Task 和 Task   (1)Task:调用方法要从调用中获取一个 T 类型,异步方法返回类型就必须是...调用方法从 Task Result 属性获取就是 T 类型。...如果异步方法返回类型为 Task 或 Task,会创建一个 Task 对象,标识需要异步完成任务,然后将 Task 返回来调用方法。...b.Task:设置 Task 属性并退出。     c.Task:设置 Task 属性和返回(Result 属性)并退出。   ④同时,调用方法将继续执行,从异步方法获取 Task 对象。

3.2K80

EF Core关系配置

导航属性 由一个属性可以访问到另外一种类型实体叫做导航属性 单向导航:不设置反向属性,然后配置时候WithMany()不设置参数即可。...EF Core中异步方法 SaveChanges()、SaveChangesAsync()、AddAsync()、AddRangeAsync()、AllAsync()、AnyAsync、AverageAsync...foreach(Book b in books.Skip(3).Take(6)) { } 局限性: SQL 查询必须返回实体类型对应数据库表所有; 结果集中列名必须与属性映射到列名称匹配。...执行SaveChanges()等方法时,EF Core将会把存储快照中与实体的当前进行比较。...未改变(Unchanged):DbContext正在跟踪此实体,该实体存在于数据库中,其属性和从数据库中读取到一致,未发生改变。

6910

ASP.NET MVC5高级编程——(3)MVC模式模型

首先数据库中主外键定义: 主键 外键 定义: 唯一标识一条记录,不能有重复,不允许为空 表外键是另一表主键, 外键可以有重复, 可以是空 作用: 用来保证数据完整性 用来和其他表建立联系用...而称ArtistID属性为外键属性(foreign key),因为与模型对应数据库中,专辑表(Album)和艺术家(Artist)表存在对外键关系,即ArtistID是Album表外键!...该派生类具有一个或多个DbSet类型属性,类型DbSet每一个T代表一个想要持久保存对象。...如果不配置从模型到数据库中表和具体映射,EF将使用约定创建一个数据库模式。 显式为代码优先数据上下文配置连接很简单,即向web.config文件中添加一个连接字符串。 ?...如果不希望在每个Action参数中都应用Bind属性,可以在Model定义中指定: ? 当绑定引发异常时,使用UpdateModel()方法会直接抛出异常

4.6K40

EF 约定介绍

,该集合属性里面的元素是另一个实体时,则默认未一对多关系,即使没有显示指定一对多关系,EF会默认设置主外键(主从)关系 (3)、一对一实体关系,需要手动设置主从关系 (4)、多对多无载荷关系实体...{ //暴露CityDbSet类型属性 public DbSet Citys { get; set; } //暴露TownDbSet...,EF会默认将长得最像Id属性(且类型为GUID)设为主键,如果类中属性(Property)名称为 ID (不区分大小写)或 ClassNameID(类名 + ID),Code First 则推断这个属性为主键...如果主键属性类型为数字型或 GUID 则会被当成标识(Identity Column) 4、关系(外键/导航属性)约定Relationship(Foreign Key/Navigation Properties.... (2)、当关联实体外键属性被设置为不为空,Code First会设置级联删除,反之不会。

1.6K100

EF Core增删改查

当然了,如果有小伙伴有更好方法也可以分享出来呀。 1.2 配置文件加载或者实体对象托管 如果我们不使用配置文件的话,就必须在EF Core上下文类里添加一个类型是DbSet属性。...null 外键属性设置为 null Restrict None None 而对于不可为NULL外键来说,枚举DeleteBehavior起以下作用: 行为名称 对内存中依赖项/子项影响 对数据库中依赖项.../子项影响 Cascade(默认) 删除实体 删除实体 ClientSetNull SaveChanges 引发异常 None SetNull 引发 SaveChanges SaveChanges 引发异常...在查询表达式写法中,排序应该这样: var results = from t in context.Set() orderby t.Id...).Where(t=>true).OrderBy(t=>t.Id); 分页只能通过方法链形式进行分页,这里提供一个分页工具方法: public static IQueryable Paging

3K20

Entity Framework 约定

我们定义完模型,还需要让EF上下文你知道应该映射那些模型,此时我们需要通过 DbSet 属性来暴露模型。...**id***,推断属性为主键(如果类中没有id属性,会查找定义成***类名称+id***属性,将这个属性作为主键)。...如果主键类型是***int*** 或者 guid 类型,主键将会被映射为自增长标识。...如果一个类中既没有id属性,也没有类名+id属性,那么代码在运行时将会报错,因为EF没有找到符合要求字段创建主键。...简单说就是:一个复杂类型作为已存在对属性,EF会将复杂类型类映射到已存在表中,已存在表包将包含这些,而不是将复杂类型映射成另外单独一张表。

1.3K10

C#异步使用要点(翻译)

异步操作时需要注意要点 1.使用异步方法返回应当避免使用void 在使用异步方法中最好不要使用void当做返回,无返回也应使用Task作为返回,因为使用void作为返回具有以下缺点 无法得知异步函数状态机在什么时候执行完毕...使用ValueTask代替 static async Task Main(string[] args) { await AddAsync(1, 1); } static ValueTask...但是也导致了上下文问题,RunAsync不在以UI线程调用 // Result和Wait()方法如果出现异常,异常将被包装为AggregateException进行抛出, return...代码更容易修改(例如:增加一个using) 异步方法诊断起来更加容易(例如:调试,挂起) 抛出异常将自动包装在返回任务之中,而不是抛出实际异常 下面这个错误例子是将Task直接返回给了调用者...,从而生成异步结果,但是这样很容易导致线程池饥饿 下面这个例子就有可能导致线程池饥饿,因为当如果没有缓存人员数据时,将阻塞请求线程 public class PersonController : Controller

3.3K50

使用异步操作时注意要点(翻译)

异步操作时需要注意要点 1.使用异步方法返回应当避免使用void 在使用异步方法中最好不要使用void当做返回,无返回也应使用Task作为返回,因为使用void作为返回具有以下缺点 无法得知异步函数状态机在什么时候执行完毕...,可能就会导致死锁' 线程池饥饿 *数据结构损坏(如果代码异常运行) 所以在创建TaskCompletionSourece时,应该使用TaskCreationOption.RunContinuationAsyncchronously...代码更容易修改(例如:增加一个using) 异步方法诊断起来更加容易(例如:调试,挂起) 抛出异常将自动包装在返回任务之中,而不是抛出实际异常 ❌下面这个错误例子是将Task直接返回给了调用者...使用定时器回调函数 ❌下面例子使用一个返回为void异步,将其传递给Timer进行,因此,如果其中任务抛出异常,则整个进程将退出 public class Pinger { private...,从而生成异步结果,但是这样很容易导致线程池饥饿 ❌下面这个例子就有可能导致线程池饥饿,因为当如果没有缓存人员数据时,将阻塞请求线程 public class PersonController :

4.6K20

Entity Framework 4.1 Code-First 学习笔记

T 就是实体类型 每一个属性都是读写属性 read/write ( get/set )   在这里,DbContext 基类通过反射来获取映射到数据库实体。...方法,然后将Order类映射到efdemo架构Order表中,再然后为OrderID设置规则,规定它为标识,自增,不能为空,且映射到表中TheOrderID列上面。...作为自动增长标识。...在 EF 中,这被称为并发标识 concurrenty token,在这篇文章中,我使用 SQL Server time-stamp 特性,这需要在表中增加一个 time-stamp 类型,我们通过它来实现乐观并发...由 SQL Server 在每次记录被更新时候维护这个。为了告诉 EF 在实体中有一个属性表示并发标识,你可以通过标签 [ConcurrencyCheck] 来标识这个属性,或者使用模型构建器。

1.6K10
领券