Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


EF6 使用手册

📄字数 2.6K
👁️阅读量 加载中...

EF6 是微软官方为 .NET 开发的对象关系映射框架。本文档将介绍 XuguDB 对 EF6 框架的适配情况,并简易描述使用 EF6 开发 XuguDB 应用的 Demo 指南。

框架名称适配起始版本官网地址源框架下载地址XuguDB框架下载demo程序地址
EF66.0.0EF6官网-版本发布列表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 指定的连接串无效

  • 连接信息不正确,连接创建失败。

  • 连接使用未关闭,导致连接数量超过限制无法创建连接。