代码改变世界

Linq to Oracle 使用教程(九)ALinq 的扩展

  麦舒  阅读(1327)  评论(0编辑  收藏  举报

 

点击这里返回目录

ALinq 在 Linq to SQL 的基本,做了一些扩展,使得它更为好用。

获取实体类的 DataContext 对象

选择Category 实体类,将 DataContext 设为 True 。

 

运行下面的代码:

static void Main(string[] args)
{
var dc
= new NorthwindDataContext() { Log = Console.Out };
var category
= dc.Categories.First();
Console.WriteLine(category.DataContext);
}

运行结果:

很明显,可以看到 category.DataContext 对象不为空,但是我们并没有在代码中给 category.DataContext 赋值,它怎么会不为空呢?我来看一下代码生成器生成的代码。

复制代码
代码
// This method is called by the dataContext when the entity is created.
private void SetDataContext(ALinq.DataContext dataContext)
{
this.DataContext = ((NorthwindDataContext)(dataContext));
}

public NorthwindDataContext DataContext
{
get
{
return this._DataContext;
}
private set
{
this._DataContext = value;
}
}
复制代码

我们主意到 SetDataContext 这个方法,当一个实体被 DataContext 创建后,DataContext 便会通反射检索名称 SetDataContext 的方法,如果存在,则调用该方法。所以,尽管我闪并没有对 category.DataContext 赋值,但 DataContext 却通过调用 SetDataContext 对它进行了赋值。

批量更新、删除

复制代码
代码
static void Main(string[] args)
{
var dc
= new NorthwindDataContext() { Log = Console.Out };
dc.Categories.Update(o
=> new Category { Categoryname = "New Name" }, o => o.Categoryid == -1);
dc.Categories.Delete(o
=> o.Categoryid == -1);
}
复制代码

运行结果:

  

使用 Linq 表达式插入数据

复制代码
代码
static void Main(string[] args)
{
var dc
= new NorthwindDataContext() { Log = Console.Out };
var categoryID
= dc.Categories.Max(c => c.Categoryid) + 1;
dc.Categories.Insert(o
=> new Category
{
Categoryid
= categoryID,
Categoryname
= "Category Name",
Description
= "Description"
});
}
复制代码

运行结果:

点击这里返回目录

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示