假设我有一些使用伪ORM的伪代码(在我的情况下,它是Linq2Db).
static IEnumerable<A> GetA()
{
using (var db = ConnectionFactory.Current.GetDBConnection())
{
return from a in db.A
select a;
}
}
static B[] DoSmth()
{
var aItems = GetA();
if (!aItems.Any())
return null;
return aItems.Select(a => new B(a.prop1)).ToArray();
}
Run Code Online (Sandbox Code Playgroud)
Connection什么时候关闭db
?在那种情况下它会被关闭吗?将关闭什么连接 - 使用语句或lambda表达式中的连接?.NET编译器正在为lambdas创建匿名类,因此它将复制到该类的连接.什么时候关闭?
不知怎的,我设法得到了Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
物化查询,异常消失了.但我想知道这件事是如何运作的.
MS SQL 数据库表具有时间戳字段,该字段的值在更新行后发生变化。在更新之前,我想检查该行是否从其他服务更改。
我可以通过将内存中对象的时间戳值与数据库表中的值进行比较来做到这一点。
我可以通过linq2db在一个原子操作中完成它吗?
它无需检查即可工作:
db.Update(product);
Run Code Online (Sandbox Code Playgroud)
这三个查询不起作用:
db.Products.Where(p => p.timestamp == product.timestamp).Update(p => p, product);
db.Products.Update(p => p.timestamp == product.timestamp, p => product );
db.Where<DB, Product, DB>(p => p.timestamp == product.timestamp).Update(product);
Run Code Online (Sandbox Code Playgroud)
我想像这样执行sql脚本:
update Products
set ...-- all fields
where Id = @id and Timestamp = @timestamp
Run Code Online (Sandbox Code Playgroud) 使用 linq2db ( https://github.com/linq2db/linq2db ) 我可以执行原始 SQL 字符串并将结果作为dynamic
?
我正在寻找类似 ADO.NETDBCommand.ExecuteReader
或 Dapper 的Query<dynamic>
.
我正在尝试做的是table
在空数据库上打开连接时动态创建.我已经用Linq
to 创建了模型Sqlite
并成功地将它与非空数据库一起使用.
现在我正在尝试使用"新"数据库.
我做我的db.Insert如下:
using (MyDB db = MyDB("MyConnectionName"))
{
Person d = new Person()
{
name = "mimi"
};
db.Insert(d);
myLabel.Content = db.Drivers.First().name;
}
}
Run Code Online (Sandbox Code Playgroud)
打开一个空数据库确定.实际上是为它创建了一个0KB的文件.但是当我尝试在其中插入某些东西(或者当然是读取某些东西)时,我得到一个例外:SQL logic error or missing database
我正在使用的库:
https://github.com/linq2db/linq2db
该NuGet
包:
http://nuget.org/packages/linq2db.SQLite/
如何使用 Linq2Db 跟踪添加、更新或删除实体行的事件?
我需要在此操作中重新计算数据库中的一些数据,最好的方法是什么?
在实体框架上,我使用自定义存储库类和自定义添加操作。也许这是 Linq2Db 中的唯一方法,但我很有趣,也许有一些捕手来通知这个事件?
为了继续使用数据库中的数据在应用程序中工作,我使用 linq2db。
如果该对象有 ID,则在 DB 中插入对象时,预计会插入 ID;如果没有标识,则在 DB 中为此对象创建新 ID。
但目前,此方法在这两种情况下都会插入新的 id。
我可以给你举个例子:
using(var db = new EIDB())
{
Customer.Id=20;
Customer.Name="Greg";
db.Insert(Customer);
}
Run Code Online (Sandbox Code Playgroud)
插入之后,我们在数据库中就有了这个名为“Greg”且 ID=1 的客户...
***有没有办法做类似的事情,但要插入之前设置的相同ID(在我们的示例中= 20)?
PS:如果我使用 NpgsqlCommand 并插入相同的数据,则插入 ID=20...
我使用 ac# 和 linq2db 并具有以下类/表层次结构:
public class YearlyTemplate
{
[Column]
public int Id { get; set; }
public List<MonthlyTemplate> MonthlyTemplates { get; set;}
}
public class MonthlyTemplate
{
[Column]
public int Id { get; set; }
[Column]
public int YearlyTemplateId { get; set; }
public YearlyTemplate YearlyTemplate{ get; set; }
public List<DailyTemplate> DailyTemplates { get; set;}
}
public class DailyTemplate
{
[Column]
public int Id { get; set; }
[Column]
public int MonthlyTemplateId { get; set; }
public MonthlyTemplate MonthlyTemplate …
Run Code Online (Sandbox Code Playgroud) 我有两张桌子Product
和user
。现在,我想一次删除多条记录,其关系如下:我想删除与特定用户相关的所有产品。
我删除了 linq2db 模板中的多条记录代码
using (var db = new DbNorthwind())
{
db.Product
.Where(p => p.Discontinued)
.Delete();
}
Run Code Online (Sandbox Code Playgroud)
但是,如何将该用户表与此代码相关联?
我无法SqlGeography
从 MS SQL DB获取对象,我使用 .net core app 和 linq2db 作为提供程序,但我有一个例外:“无法为几何创建‘GIS_CH_DB.sys.geography’类型或‘’特定类型。 ”
但我用
var provider = (SqlServerDataProvider)DataConnection.GetRegisteredProviders()[LinqToDB.ProviderName.SqlServer2014];
provider.AddUdtType<SqlGeography>("Geography", null, LinqToDB.DataType.Udt);
provider.AddUdtType<SqlGeometry>("Geometry", null, LinqToDB.DataType.Udt);
Run Code Online (Sandbox Code Playgroud)
这应该将 SQLGeography 转换为正确的对象。有人知道如何解决这个问题吗?