Linq to Oracle 使用教程(九)ALinq 的扩展
2010-12-04 16:48 麦舒 阅读(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"
});
}
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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的设计模式综述