一、安装hubble.net(安装后会自动开启一个hubble.net的服务,)
二、首先是hubble.net的升级(目前hubble提供的版本都没有直接带有mongoAdapter)
首先 我们暂停hubble.net服务
其次 从hubble的官网http://hubbledotnet.codeplex.com/上面下载源代码进行编译。我的源代码下载到D:\软件\Hubble.Net\中了,解压后找到c#文件夹(D:\软件\Hubble.Net\hubbledotnet-100319\C#)找到c#文件夹中的src文件夹D:\软件\Hubble.Net\hubbledotnet-100319\C#\src,对解决方案进行编译(以release方式进行编译)。
再次 回到c#文件夹,找到bin文件夹下的D:\软件\Hubble.Net\hubbledotnet-100319\C#\Bin\Release文件夹,将其中的所有文件复制,复制到我们安装目录下的default文件夹下,并全部选择覆盖。
最后 开启服务,打开我们的hubble.net 就会发现我们的hubble上面已经有mongoAdapter了。
三、决定使用什么样的方式和索引MongoDB
1、主动模式(主动模式就是hubble完全控制数据库)
这种方式是最简单的方案,比较适合于即时性比较高的工作。
在此种情况下我们只要在hubble创建一个表,则同时mongodb中也会创建一个同样的表,整个表的结构完全相同,此时我们所有的操作都是直接去操作hubble即可。
2、被动模式(被动模式情况下我们需要自己手动的去操作数据库)
在这种情况下hubble表可以和mongo表不同(就是hubble表中可以只对需要索引的字段进行处理)
插入:先插入数据库再插入hubble
删除:先删除hubble再删除数据库中的记录
更新:顺序无所谓
3、sqlserver做主表,mongodb做镜像表
在这种情况下MongoDB也是完全受hubble控制的。
此时hubble与镜像表的关系是主动模式连接的,与主表的关系是被动模式连接的。
所以此时的操作规则如下
插入:先插入主表再插入hubble
删除:先删除hubble再删除主表中的记录
更新:顺序无所谓
四、代码实现
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using Hubble.SQLClient; 6 using System.Data; 7 using System.Configuration; 8 9 namespace HubbleIndex10 {11 public class HubbleHelper12 {13 //现在的方式是mongo库和表都要在hubble中手动的去建。14 private readonly static string connStr =System.Configuration.ConfigurationSettings.AppSettings["HubbleConn"];//连接字符串15 ///16 /// 增删改的操作的方法17 /// 18 /// hubble的sql语句19 /// 参数20 public static int ExecuteNonQuery(string hubbleSql, HubbleParameterCollection parameters)21 {22 int flag=0;23 using (HubbleAsyncConnection conn = new HubbleAsyncConnection(connStr))24 {25 conn.Open();26 HubbleCommand matchCmd =new HubbleCommand(hubbleSql, conn);27 if (parameters!=null||parameters.Count!=0)28 {29 for (int i = 0; i < parameters.Count; i++)30 matchCmd.Parameters.Add(parameters[i].ParameterName, parameters[i].Value);31 }32 try {flag= matchCmd.ExecuteNonQuery(); }33 catch (Exception e)34 { 35 flag = -1;36 throw e;37 }38 }39 return flag;40 }41 ///42 /// 查询方法43 /// 44 /// hubble的sql语句45 /// 参数46 /// 查询的数量47 /// 缓存过期时间48 ///49 public static DataSet ExecuteSelect(string hubbleSql,int cacheTimeout,out int count, HubbleParameterCollection parameters)50 {51 DataSet ds = new DataSet(); count = 0;52 using (HubbleAsyncConnection conn = new HubbleAsyncConnection(connStr))53 {54 conn.Open();55 HubbleDataAdapter adapter = new HubbleDataAdapter();56 adapter.SelectCommand = new HubbleCommand(hubbleSql, conn);57 //int cacheTimeout = 10;58 adapter.SelectCommand.CacheTimeout = cacheTimeout;//秒59 if (parameters!=null||parameters.Count!=0)60 {61 for (int i = 0; i < parameters.Count; i++)62 adapter.SelectCommand.Parameters.Add(parameters[i].ParameterName, parameters[i].Value); 63 }64 65 HubbleCommand cmd = adapter.SelectCommand;66 try67 {68 ds = cmd.Query(cacheTimeout);69 count = ds.Tables[0].MinimumCapacity;70 }71 catch (Exception e) { throw e; }72 }73 return ds;74 }75 }76 }
添加的引用
转载请注明出处: