• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >MongoDB > SqlServer与MongoDB结合使用NHibernate

SqlServer与MongoDB结合使用NHibernate

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了sql server 与mysql,sql server 与oracle,ms sql server与sybas,access与sql server,sql与sql server等相关知识,希望本文的分享对您有所帮助

本文实例为大家分享了SqlServer与MongoDB结合使用NHibernate的代码,供大家参考,具体内容如下

Program.cs代码内容:

class Program 
 { 
   private const string SqlServerConnectionString = 
     @"Data Source=.;Initial Catalog=SqlWithMongo;Persist Security Info=True;User ID=sa;Password=123456"; 
 
   private const string MongoConnectionString = "mongodb://localhost:27017"; 
   private const int NumberOfNodes = 1000; 
 
   private static void Main(string[] args) 
   { 
     Console.WriteLine("Clearing database..."); 
     ClearDatabases(); 
     Initer.Init(SqlServerConnectionString, MongoConnectionString); 
     Console.WriteLine("Completed"); 
 
     Console.WriteLine("Creating nodes..."); 
     //创建sqlserver的Node节点 
     CreateNodes(); 
     Console.WriteLine("Completed"); 
 
     Console.WriteLine("Linking nodes..."); 
     long milliseconds1 = LinkSqlNodes(); //创建sqlserver的LinkNode节点 
     Console.WriteLine("SQL : " + milliseconds1); 
     long milliseconds2 = LinkMongoNodes(); //同时创建Node,LinkNode节点 
     Console.WriteLine("Mongo : " + milliseconds2); 
     Console.WriteLine("Completed"); 
 
     Console.WriteLine("Fetching nodes..."); 
     long milliseconds3 = FetchSqlNodes(); //取出sqlserver节点数据 
     Console.WriteLine("SQL : " + milliseconds3); 
     long milliseconds4 = FetchMongoNodes(); //取出Mongodb节点数据 
     Console.WriteLine("Mongo : " + milliseconds4); 
     Console.WriteLine("Completed"); 
 
     Console.ReadKey(); 
   } 
 
 
   private static long FetchMongoNodes() 
   { 
     var stopwatch = new Stopwatch(); 
     stopwatch.Start(); 
 
     for (int i = 0; i < NumberOfNodes; i++) 
     { 
       using (var unitOfWork = new UnitOfWork()) 
       { 
         var repository = new MongoNodeRepository(unitOfWork); 
 
         MongoNode node = repository.GetById(i + 1); 
         IReadOnlyList<NodeLink> links = node.Links; 
       } 
     } 
     stopwatch.Stop(); 
     return stopwatch.ElapsedMilliseconds; 
   } 
 
 
   private static long FetchSqlNodes() 
   { 
     var stopwatch = new Stopwatch(); 
     stopwatch.Start(); 
 
     for (int i = 0; i < NumberOfNodes; i++) 
     { 
       using (var unitOfWork = new UnitOfWork()) 
       { 
         var repository = new NodeRepository(unitOfWork); 
 
         Node node = repository.GetById(i + 1); 
         IReadOnlyList<Node> links = node.Links; 
       } 
     } 
 
     stopwatch.Stop(); 
     return stopwatch.ElapsedMilliseconds; 
   } 
 
 
   private static long LinkSqlNodes() 
   { 
     var stopwatch = new Stopwatch(); 
     stopwatch.Start(); 
 
     using (var unitOfWork = new UnitOfWork()) 
     { 
       var repository = new NodeRepository(unitOfWork); 
 
       IList<Node> nodes = repository.GetAll(); 
       foreach (Node node1 in nodes) 
       { 
         foreach (Node node2 in nodes) 
         { 
           node1.AddLink(node2); 
         } 
       } 
       unitOfWork.Commit(); 
     } 
 
     stopwatch.Stop(); 
     return stopwatch.ElapsedMilliseconds; 
   } 
 
 
   private static long LinkMongoNodes() 
   { 
     var stopwatch = new Stopwatch(); 
     stopwatch.Start(); 
 
     using (var unitOfWork = new UnitOfWork()) 
     { 
       var repository = new MongoNodeRepository(unitOfWork); 
 
       IList<MongoNode> nodes = repository.GetAll(); 
       foreach (MongoNode node1 in nodes) 
       { 
         foreach (MongoNode node2 in nodes) 
         { 
           node1.AddLink(node2); 
         } 
       } 
       unitOfWork.Commit(); 
     } 
 
     stopwatch.Stop(); 
     return stopwatch.ElapsedMilliseconds; 
   } 
 
 
   private static void CreateNodes() 
   { 
     using (var unitOfWork = new UnitOfWork()) 
     { 
       var repository = new NodeRepository(unitOfWork); 
 
       for (int i = 0; i < NumberOfNodes; i++) 
       { 
         var node = new Node("Node " + (i + 1)); //实例化 构造函数初始化name 
         repository.Save(node); 
       } 
 
       unitOfWork.Commit(); 
     } 
 
     using (var unitOfWork = new UnitOfWork()) 
     { 
       var repository = new MongoNodeRepository(unitOfWork); 
 
       for (int i = 0; i < NumberOfNodes; i++) 
       { 
         var node = new MongoNode("Node " + (i + 1)); 
         repository.Save(node); 
       } 
 
       unitOfWork.Commit(); 
     } 
   } 
 
   //清空数据 
   private static void ClearDatabases() 
   { 
     new MongoClient(MongoConnectionString) 
       .GetDatabase("sqlWithMongo") 
       .DropCollectionAsync("links") 
       .Wait(); 
 
     string query = "DELETE FROM [dbo].[MongoNode];" + 
             "DELETE FROM [dbo].[Node_Node];" + 
             "DELETE FROM [dbo].[Node];" + 
             "UPDATE [dbo].[Ids] SET [NextHigh] = 0"; 
 
     using (var connection = new SqlConnection(SqlServerConnectionString)) 
     { 
       var command = new SqlCommand(query, connection) 
       { 
         CommandType = CommandType.Text 
       }; 
 
       connection.Open(); 
       command.ExecuteNonQuery(); 
     } 
   } 
 } 
</div>

相关辅助类代码如下:

public static class Initer 
 { 
   public static void Init(string sqlServerConnectionString, string mongoConnectionString) 
   { 
     //SqlServer初始化 
     SessionFactory.Init(sqlServerConnectionString); 
     //Mongodb初始化 
     NodeLinkRepository.Init(mongoConnectionString); 
   } 
 } 
</div>
public static class SessionFactory //工厂 
  { 
    private static ISessionFactory _factory; 
 
 
    internal static ISession OpenSession() 
    { 
      return _factory.OpenSession(new Interceptor()); 
    } 
 
 
    internal static void Init(string connectionString) 
    { 
      _factory = BuildSessionFactory(connectionString); 
    } 
 
 
    private static ISessionFactory BuildSessionFactory(string connectionString) 
    { 
      //用编程的方式进行配置,让你能更好的理解,不需要编写复杂的映射文件,它能完全替换NHibernate的映射文件,让你在映射的时候能使用C#的强类型方式。 
      FluentConfiguration configuration = Fluently.Configure() 
        .Database(MsSqlConfiguration.MsSql2012.ConnectionString(connectionString)) 
        .Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly())) 
        .ExposeConfiguration(x => 
        { 
          x.EventListeners.PostLoadEventListeners = new IPostLoadEventListener[] 
          { 
            new EventListener() 
          }; 
        }); 
 
      return configuration.BuildSessionFactory(); 
    } 
  } 
</div>
internal class NodeLinkRepository //仓库 Repository模式 
  { 
    private static IMongoCollection<NodeLinks> _collection; 
 
 
    public IList<NodeLink> GetLinks(int nodeId) 
    { 
      NodeLinks links = _collection.Find(x => x.Id == nodeId).SingleOrDefaultAsync().Result; 
       
      if (links == null) 
        return new NodeLink[0]; 
 
      return links.Links; 
    } 
 
 
    public Task SaveLinks(int nodeId, IEnumerable<NodeLink> links) 
    { 
      var nodeLinks = new NodeLinks(nodeId, links); 
      var updateOptions = new UpdateOptions 
      { 
        IsUpsert = true 
      }; 
 
      return _collection.ReplaceOneAsync(x => x.Id == nodeId, nodeLinks, updateOptions); 
    } 
 
 
    internal static void Init(string connectionString) 
    { 
      var client = new MongoClient(connectionString); 
      IMongoDatabase database = client.GetDatabase("sqlWithMongo"); 
      var collectionSettings = new MongoColle
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • SqlServer与MongoDB结合使用NHibernate

相关文章

  • 2017-05-11详解MongoDB中用sharding将副本集分配至服务器集群的方法
  • 2017-05-11Mongodb 删除添加分片与非分片表维护
  • 2017-05-11MongoDB中游标的深入学习
  • 2017-05-11初识NoSQL NoSql数据库入门 NoSql数据库基础知识
  • 2017-05-11深入理解MongoDB分片的管理
  • 2017-05-111亿条记录的MongoDB数据库随机查询性能测试
  • 2017-05-11MongoDB与MySQL的操作对比表及区别介绍
  • 2017-05-11MongoDB系列教程(二):MongoDB简介
  • 2017-05-11cgroup限制mongodb进程内存大小
  • 2017-05-11Mongodb启动命令参数中文说明

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MongoDB快速入门笔记(二)之MongoDB的概念及简单操作
    • MongoDB使用小结:一些不常见的经验分享
    • 详解MongoDB中创建集合与删除集合的操作方法
    • MongoDB的安装方法图文教程
    • MongoDB索引使用详解
    • mongodb 常见问题处理方法收集
    • MongoDB服务端JavaScript脚本使用方法
    • mongoDB在windows下安装与配置方案
    • MongoDB的基本安装与管理命令脚本总结
    • MongoDB使用指南--基本操作

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有