安装的MongoDB数据库
网官下载地址 https://www.mongodb.com/download-center/community
网盘下载地址链接:https://pan.baidu.com/s/1bhrEk0si4SkB0XX0Zyu5_Q提取码:6rrt
安装MongoDB的管理工具
网官下载地址 https://robomongo.org/
网盘下载地址链接:https://pan.baidu.com/s/1LVvid3Wce2x9k3CDPxmoag提取码:4e4c
修改ET数据库配置信息:
1.在Unity中修改信息工具->命令行配置
选择LocalAllServer.txt
2.修改服务器的配置信息
在Server.APP中找到程序进入。
找到DBComponent鼠标移动上去按F12进入到定义
解除下方的注释
3.在服务器中创建测试实体类
在Server.Model中创建一个自己的文件夹目录然后创建一个UserInfo的实体类继承自实体
的UserInfo类内容
using MongoDB.Bson.Serialization.Attributes;
namespace ETModel
{
/// <summary>
/// 用户信息
/// </summary>
[BsonIgnoreExtraElements]
public class UserInfo : Entity
{
public string Account;
public string PassWord;
}
}
现在的UserInfo已经创建完成,接下来就可以在自己所生成的接口中进行读写操作了。在ET中如果你想对数据库进行操作的话你需要先获得该组件!
DBProxyComponent dbProxy = Game.Scene.GetComponent<DBProxyComponent>();
在ET中不会给我们删除数据的代码,所以我们要自己补全代码
选方保存方法F12到定义在其中添加三个方法来做删除
/// <summary>
/// 根据ID删除数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="self"></param>
/// <param name="id"></param>
/// <returns></returns>
public static async Task Delete<T>(this DBProxyComponent self,long id)
{
DBComponent dbComponent = Game.Scene.GetComponent<DBComponent>();
await dbComponent.GetCollection(typeof(T).Name).DeleteOneAsync(i => i.Id == id);
}
/// <summary>
/// 清空表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="self"></param>
/// <returns></returns>
public static async Task DeleteAll<T>(this DBProxyComponent self)
{
DBComponent dbComponent = Game.Scene.GetComponent<DBComponent>();
var filter = Builders<ComponentWithId>.Filter.Empty;
await dbComponent.GetCollection(typeof(T).Name).DeleteManyAsync(filter);
}
/// <summary>
/// 根据表达式删除
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="self"></param>
/// <param name="exp"></param>
/// <returns></returns>
public static async Task DeleteAll<T>(this DBProxyComponent self, Expression<Func<T, bool>> exp)
{
DBComponent dbComponent = Game.Scene.GetComponent<DBComponent>();
ExpressionFilterDefinition<T> filter = new ExpressionFilterDefinition<T>(exp);
IBsonSerializerRegistry serializerRegistry = BsonSerializer.SerializerRegistry;
IBsonSerializer<T> documentSerializer = serializerRegistry.GetSerializer<T>();
string json = filter.Render(documentSerializer, serializerRegistry).ToJson();
await dbComponent.GetCollection(typeof(T).Name).FindOneAndDeleteAsync(json);
}
以下是增删改改查的例子:
//获取数据库
DBProxyComponent dbProxy = Game.Scene.GetComponent<DBProxyComponent>();
//查询账号为admin
List<ComponentWithId> users = await dbProxy.Query<DBUserInfo>(user => user.Account == "admin");
//列表大于0则为查询到
if (users.Count > 0)
{
//取得该条数据
DBUserInfo info = await dbProxy.Query<DBUserInfo>(users[0].Id);
//修改改条数据的密码为2
info.PassWord = "2";
//更新数据
await dbProxy.Save(info);
}
//表达式删除所有账号为c的数据
await dbProxy.DeleteAll<DBUserInfo>(user => user.Account == "c");
//写入一条新数据 在ET中写入一条新数据的话需要使用此种方法来写入,否则的话_id 一直为0 会覆盖
DBUserInfo newdata = ComponentFactory.Create<DBUserInfo>();
newdata.Account = "user";
newdata.PassWord = "123456";
await dbProxy.Save(newdata);
注意:如果你想更好的分布式请参照其他方法的实现封装一下代码