标签:each server batch targe down 好的 cti ide orm
在Efcore规则下,实体类中,凡是以实体类名称+Id的形式或直接叫Id形势的变量,Ef默认它是主键,并会自动自增.
efcore上下文是需要释放的,所以我们在使用上下文的时候需要使用using来进行包裹.
在efcore中使用上下文的方式有两种
在asp.net core 中如果使用了AddContext方式来注入EFCore 那么会自动添加日志记录的功能,无需在另外应用.
数据源
var province = new Province
{
Name = "北京",
Population = 2_000_000
};
var province2 = new Province
{
Name = "上海",
Population = 1_000_000
};
var province3 = new Province
{
Name = "关东",
Population = 3_000_000
};
添加追踪的方式1
this._context.Province.Add(province);
this._context.Province.Add(province2);
this._context.Province.Add(province3);
添加追踪的方式2
this._context.Province.AddRange(province,province2,province3);
添加追踪的方式3
this._context.Province.AddRange(new List<Province>
{
province,province2,province
});
提交添加功能
this._context.SaveChanges();
数据源:
var province = new Province
{
Name = "天津",
Population = 8_000_000
};
var company = new Company()
{
Name = "TaiDa",
EstablishDate = new DateTime(1990,1,1),
LegalPerson = "Secret Man"
};
添加
this._context.AddRange(province, company);
提交
this._context.SaveChanges();
如果想修改此限制也是可以的,我们可以在AddDbContext方法中,修改限制,代码如下:
options.UseSqlServer(
_configuration.GetConnectionString("DefaultConnectionString"),
opts=>opts.MaxBatchSize(1000000)); //修改一次提交的命令的数量限制
});
//查询所有provinces表的数据
var provinces = _context.Province.ToList();
//带过滤条件的查询
var provinces2 = _context.Province
.Where(x => x.Name == "北京")
.ToList();
//使用Linq的方式查询
var provinces3 = (from p in _context.Province
where p.Name == "上海"
select p).ToList();
值得注意的是,在进行.ToList()
方法之前,无论是查询方法的方式(表达式树),还是Linq表达式的方式,都只是构建了一个查询表达式,并没有实际去查询数据库,我们可以理解成是在拼接sql的过程,只有执行到类似如.ToList()
或者.ToDictionary()
或者.ToArray()
等方法的时候才会正在的发送生成好的sql脚本到数据库中去进行查询.
查询注意事项:
案例代码如下:
var provinces4 = _context.Province
.Where(x => x.Name == "北京");
foreach (var province in provinces4)
{
Console.WriteLine(province.Name);
/*执行了一些耗时方法*/
}
上述代码的问题在于,变量provinces4
此时只是相当于一个表达式树,在使用foreach
对这个表达式树进行遍历时,此表达式树会生成相应的sql去请求数据库查询数据,但是如果这个foreach
循环执行的时间比较长的话,会导致数据库连接长期处于被打开状态(引发数据库性能问题),此时如果有别的操作来,操作此表的话,就会出现一些意想不到的事情,所以在遍历之前,我们最好使用ToList()
方法之类的方式,先将此表达式应对的数据查询到内存中(此处数据库连接就会被关闭掉),再对查询到数据进行处理.
- 上述文档参考自
[插入数据和简单查询]
003 Entity Framework Core 2.x P3 插入数据和简单查询
标签:each server batch targe down 好的 cti ide orm
原文地址:https://www.cnblogs.com/HelloZyjS/p/12709575.html