随笔- 672
文章- 2
评论- 325
阅读-
281万
随笔分类 - EF Core
在ASP.NET Core中将EF Core的日志通过NLog输出到控制台
摘要:首先定义一个实现了ILogger接口的类EFLogger,主要目的是将EF Core生成的Log信息输出到NLog: namespace AspNetCore8EFLogger.EF.Logger { public class EFLogger : ILogger { protected reado
阅读全文
ADO.NET中的DBNull
摘要:在ADO.NET和EF Core中使用DbParameter/SqlParameter时,如果要传递数据库null值给数据库必须要使用DBNull,下面的微软文档介绍了DBNull: DBNull Class 其中这里有提到DBNull.Value.Equals方法的使用。 同时在下面这篇微软ADO
阅读全文
EF Core Keys(链接)
摘要:下面这篇微软的官方文档详细介绍了如何给EF Core的实体类定义Key: Keys 注意,其中的Configuring a primary key还介绍了如何使用Fluent API,来用多个字段给实体类定义组合Key: protected override void OnModelCreating
阅读全文
EF Core使用SharedTypeEntity,映射实体类到不同的数据库表(转载)
摘要:我们可以借助EF Core的SharedTypeEntity,映射一个实体类到多个结构相同的数据库表: public class User { public int Id { get; set; } public string Name { get; set; } } public class So
阅读全文
避免DbContext同时在多个线程调用
摘要:下面这个微软官方文档阐述了,应该避免在多个线程上同时操作同一个DbContext: Avoiding DbContext threading issues 其中有说到,在使用DbContext的代码中,所有的异步函数应该立即被await,否则会有极大概率抛出InvalidOperationExcep
阅读全文
使用DbContext.Set<TEntity>()方法也可以对数据库实体进行CRUD操作
摘要:我们可以用DbContext.Set<TEntity>()方法获取到一个DbSet<TEntity>对象,从而对泛型TEntity类所代表的数据库表进行CRUD操作。 例如我们现在有数据库表和TEntity类Person,那么下面两种写法是完全等价的: dbContext.Persons.Take(
阅读全文
ADO.NET的数据库连接池(链接)
摘要:下面这篇文章,很详细地介绍了ADO.NET中的数据库连接池: ADO.NET入门教程(五) 细说数据库连接池 其中有提到如果连接池中的数据库连接数不够了,会导致SqlConnection连接超时,所以要合理地设置SqlConnectionStringBuilder.MaxPoolSize和SqlCo
阅读全文
关于Microsoft.Data.SqlClient(链接)
摘要:官方NuGet链接如下: Microsoft.Data.SqlClient 微软官方文档介绍: Introduction to Microsoft.Data.SqlClient namespace 另一篇很详细的介绍文章: Introducing the new Microsoft.Data.Sql
阅读全文
EF Core中使用事务(链接)
摘要:下面这篇微软官方文档,介绍了如何在EF Core中使用事务: Using Transactions 请注意,里面提到了在.NET Core中TransactionScope对分布式事务的支持情况:Limitations of System.Transactions
阅读全文
TransactionScope在EF Core中的局限性(链接)
摘要:EF Core从2.1开始支持TransactionScope的使用,但是在EF Core中使用TransactionScope是有一些局限性的,原因是.NET Core是一个跨操作系统平台的框架,而TransactionScope的有一些特性只在Windows系统上支持,在Linux系统上不支持,
阅读全文
EF Core中如何使用LEFT JOIN
摘要:我们知道使用EF Core的Join函数可以实现SQL中的INNER JOIN,那么怎么实现LEFT JOIN呢? 答案就在GroupJoin、SelectMany和DefaultIfEmpty三个Linq函数的组合使用上。 下面我们举个例子,建立一个.NET Core控制台项目,来演示使用EF C
阅读全文
TransactionScope and database connections(转载)
摘要:问 Do TransactionScope work with closed database connections? using (var transaction = new TransactionScope(TransactionScopeOption.Required)) { // crea
阅读全文
关于TransactionScope.Complete方法(链接)
摘要:相信有些同学会困扰,当我们执行TransactionScope.Complete()方法的时候,是否Transaction被真正提交到数据库了。 对于这一点,MSDN上有这么一段描述: If the TransactionScope object created the transaction in
阅读全文
How to call a stored procedure in EF Core 3.0 via FromSqlRaw(转载)
摘要:问: I recently migrated from EF Core 2.2 to EF Core 3.0. Unfortunately, I haven't found a way to call a stored procedure that returns an entity. In EF
阅读全文
EF Core中如何设置数据库表自己与自己的多对多关系
摘要:本文的代码基于.NET Core 3.0和EF Core 3.0 有时候在数据库设计中,一个表自己会和自己是多对多关系。 在SQL Server数据库中,现在我们有Person表,代表一个人,建表语句如下: 其中PersonID列是Person表的主键。 因为一个人会有多个朋友,所以实际上这种人与人
阅读全文
EF Core中,通过实体类向SQL Server数据库表中插入数据后,实体对象是如何得到数据库表中的默认值的
摘要:我们使用EF Core的实体类向SQL Server数据库表中插入数据后,如果数据库表中有自增列或默认值列,那么EF Core的实体对象也会返回插入到数据库表中的默认值。 下面我们通过例子来展示,EF Core是怎么获取数据库的默认值的。首先我们建立一个.NET Core控制台项目,然后引入EF C
阅读全文
SQL Server数据库(时间戳timestamp)类型 (转载)
摘要:timestamp介绍 如何使用SQL语句插入timestamp字段值?我们从上面的timestamp定义中知道了timestamp这个值一般都是数据库自动添加和修改的,相当于自动增长标识一样(而且执行update修改语句这个字段也会自动更新),所以一般这个字段我们只做查询操作。如果要更新这个字段则
阅读全文
EF Core中DbContext可以被Dispose多次
摘要:我们知道,在EF Core中DbContext用完后要记得调用Dispose方法释放资源。但是其实DbContext可以多次调用Dispose方法,虽然只有第一次Dispose会起作用,但是DbContext多次调用Dispose方法并不会报错。 我们看看下面的示例代码,可以看到我们调用了DbCon
阅读全文
ADO.NET的Connection Timeout和Command Timeout (转载)
摘要:每次对数据库连接时,我们有时候会碰到连接超时或者命令超时,这两个超时是不一样的。以ADO.NET为例,当客户端和服务器端连接时,碰到的超时情况主要有下面几种:当从连接池获取一个连接时,碰到超时。当建立一个全新连接(而不是从连接池获取)时,碰到超时。当发送一个命令(command)到SQL Serve
阅读全文