EF6 使用手册
📄字数 2.6K
👁️阅读量 加载中...
EF6 是微软官方为 .NET 开发的对象关系映射框架。本文档将介绍 XuguDB 对 EF6 框架的适配情况,并简易描述使用 EF6 开发 XuguDB 应用的 Demo 指南。
框架名称 | 适配起始版本 | 官网地址 | 源框架下载地址 | XuguDB框架下载 | demo程序地址 |
---|---|---|---|---|---|
EF6 | 6.0.0 | EF6官网 | - | 版本发布列表 | xugu-efcore |
提示
其他适配版本可详见版本发布列表
一、方言包使用说明
1.1 方言包安装
将 XuguDB EF6 方言压缩包解压,点击 vs 工程中的“引用”,右键选择“添加引用”,单击“浏览”选择解压获取到的方言包动态库文件,最后点击“确定”完成动态库文件引用。
1.2 连接 XuguDB
使用 DbConfigurationType 标签定义 XuguDB 上下文,传入 XuguDB .NET 驱动连接串配置连接信息。之后便可使用与模型关联的 DbContext 来执行数据操作。
c#
[DbConfigurationType(typeof(XGEFConfiguration))]
public class MyDbContext : DbContext
{
public MyDbContext() : base("IP=127.0.0.1;PORT=5138;DB=SYSTEM;USER=SYSDBA;PWD=SYSDBA;")
{
Database.Connection.Open();
}
}
二、连接示例程序
本章节将介绍在 EF6 应用连接 XuguDB 。
2.1 前提条件
- 已安装具有
.NET 桌面开发
工作负荷的 Visual Studio。 - 已安装 EF6 。
- 已部署 XuguDB 12.0.0 或有能连接访问的虚谷数据库实例。
2.2 操作步骤
2.2.1 定义表模型
cs
using System;
using System.Collections.Generic;
public class User
{
public int ID { get; set; }
public string NAME { get; set; }
public int AGE { get; set; }
}
2.2.2 创建 XuguDB 上下文实例
根据 连接 XuguDB 说明 创建 XuguDB DbContext实例。
cs
[DbConfigurationType(typeof(XGEFConfiguration))]
public class MyDbContext : DbContext
{
public MyDbContext() : base("IP=127.0.0.1;PORT=5138;DB=SYSTEM;USER=SYSDBA;PWD=SYSDBA;")
{
Database.Connection.Open();
}
public DbSet<User> Users { get; set; }
}
2.2.3 定义增删改查等数据库基础操作
cs
// 单条插入
using (var context = new MyDbContext())
{
// 1. 添加用户
var newUser = new User { NAME = "Alice", AGE = 30 };
context.Entry(newUser).State = EntityState.Added;
context.SaveChanges();
Console.WriteLine("User added.");
}
//2、单条数据查找和修改
using (var context = new MyDbContext())
{
var newUser = new User {ID = 2, NAME = "Alice", AGE = 30 };
context.Set<User>().Attach(newUser);
PropertyInfo[] props = newUser.GetType().GetProperties();
foreach (PropertyInfo prop in props)
{
if (prop.GetValue(newUser, null) != null)
{
if (prop.GetValue(newUser, null).ToString() == "Alice")
context.Entry(newUser).Property(prop.Name).CurrentValue = null;
context.Entry(newUser).Property(prop.Name).IsModified = true;
}
}
context.SaveChanges();
}
// 3、查找单条数据并删除
using (var dbcontext = new MyDbContext())
{
var newUser = new User { ID = 5, NAME = "Alice", AGE = 30 };
dbcontext.Set<User>().Attach(newUser);
dbcontext.Entry<User>(newUser).State = EntityState.Deleted;
dbcontext.SaveChanges();
}
//4、查找多条数据并删除
using (var dbcontext = new MyDbContext())
{
var entitys = dbcontext.Set<User>().Where(e => e.ID > 10).ToList();
entitys.ForEach(m => dbcontext.Entry<User>(m).State = EntityState.Deleted);
dbcontext.SaveChanges();
}
//5、按主键查找单条数据
using (var dbcontext = new MyDbContext())
{
var entitys = dbcontext.Set<User>().Find(2);
Console.WriteLine("User Select by Primary key");
}
//6、按lamuda表达式查询满足条件的第一条记录
using (var dbcontext = new MyDbContext())
{
var user = dbcontext.Set<User>().FirstOrDefault(u => u.NAME == "Alice");
if (user != null)
{
Console.WriteLine($"User found: {user.NAME}, Age: {user.AGE}");
}
}
//7、查询表中全部数据
using (var dbcontext = new MyDbContext())
{
var data = dbcontext.Set<User>().ToList();
Console.WriteLine("Slect All");
}
//8、查询表中所有满足lamuda表达式的记录
using (var dbcontext = new MyDbContext())
{
var data = dbcontext.Set<User>().Where(e => e.ID > 10).ToList();
Console.WriteLine("Slect ID > 10");
}
//9、按sql语句查询满足条件的记录
using (var dbcontext = new MyDbContext())
{
var data = dbcontext.Database.SqlQuery<User>("select * from Users;").ToList<User>();
Console.WriteLine("sql select");
}
//10、分页查询满足条件的记录
using (var dbcontext = new MyDbContext())
{
var data = dbcontext.Set<User>().OrderBy(e => e.ID).Skip(2).Take(2).ToList();
Console.WriteLine("select limit");
}
三、常见问题&解决办法
在使用 EF6 连接 XuguDB 时,可能会遇到各种错误。以下列举一些常见的错误及其处理方法。
3.1 中文数据乱码
客户端字符集属性设置与客户端实际字符集属性不一致,确定客户端实际字符集属性。
3.2 指定的连接串无效
连接信息不正确,连接创建失败。
连接使用未关闭,导致连接数量超过限制无法创建连接。