SqlServer与MongoDB结合使用NHibernate的完整攻略,包含以下步骤:
第一步:配置NHibernate
配置NHibernate时,需要指定SqlServer和MongoDB的数据库连接串,配置文件的示例如下:
NHibernate.Connection.DriverConnectionProvider
NHibernate.Driver.SqlClientDriver
Server=localhost;Database=SqlServerDatabase;User=sa;Password=123456;
NHibernate.Dialect.MsSql2008Dialect
true
50
60
thread_static
其中,SqlServer的连接串为Server=localhost;Database=SqlServerDatabase;User=sa;Password=123456;
,MongoDB的连接串可以通过MongoDB.Driver.MongoClient类来设置。
第二步:定义实体对象
定义SqlServer和MongoDB两个数据源的实体对象,可以使用NHibernate的Attribute或Fluent API来映射实体对象及关系。示例如下:
[Table("SqlServerTable1")]
public class SqlServerEntity1
{
[Id]
public virtual int Id { get; set; }
[Property]
public virtual string Name { get; set; }
// one-to-many
[OneToMany]
public virtual ICollection Entities { get; set; }
}
[Table("SqlServerTable2")]
public class SqlServerEntity2
{
[Id]
public virtual int Id { get; set; }
[ManyToOne]
public virtual SqlServerEntity1 Entity1 { get; set; }
}
[CollectionName("MongoDBCollection1")]
[BsonIgnoreExtraElements]
public class MongoDBEntity1
{
[BsonId]
public virtual ObjectId Id { get; set; }
[BsonElement("name")]
public virtual string Name { get; set; }
// one-to-many
[BsonElement("entities")]
public virtual ICollection Entities { get; set; }
}
[CollectionName("MongoDBCollection2")]
[BsonIgnoreExtraElements]
public class MongoDBEntity2
{
[BsonId]
public virtual ObjectId Id { get; set; }
[BsonElement("entity1")]
public virtual ObjectId Entity1Id { get; set; }
[BsonIgnore]
public virtual MongoDBEntity1 Entity1 { get; set; }
}
第三步:配置SessionFactory并创建Session
在代码中,首先要根据配置文件构建SessionFactory,并创建Session。示例如下:
// 配置SessionFactory
var configuration = new Configuration().Configure();
var sessionFactory = configuration.BuildSessionFactory();
// 创建Session
using (var session = sessionFactory.OpenSession())
{
// 数据库操作代码
}
第四步:对数据库进行操作
针对多个数据源的访问,可以使用NHibernate的ISessionFactory和ISession来实现,示例如下:
// 针对SqlServer的代码
using (var transaction = session.BeginTransaction())
{
var entity1 = new SqlServerEntity1
{
Name = "SqlServer1",
Entities = new List
{
new SqlServerEntity2()
}
};
session.Save(entity1);
transaction.Commit();
}
// 针对MongoDB的代码
using (var mongoClient = new MongoClient("mongodb://localhost:27017"))
{
var database = mongoClient.GetDatabase("MongoDBDatabase");
var collection = database.GetCollection("MongoDBCollection1");
var entity1 = new MongoDBEntity1
{
Name = "MongoDB1",
Entities = new List
{
new MongoDBEntity2
{
Entity1Id = ObjectId.GenerateNewId()
}
}
};
collection.InsertOne(entity1);
}
以上就是SqlServer与MongoDB结合使用NHibernate的完整攻略,示例代码中包含了针对SqlServer和MongoDB两个数据源的操作。