Castle.ActiveRecord多数据库配置
最近使用Castle.ActiveRecord框架,网上关于多数据支持的文章很少,因此有了这篇博文的产生。
开发工具VS2015,Sql Server2008R2
新建数据库,数据初始化脚本如下:
--新建数据库Castle.ActiveRecord.DB1
CREATE DATABASE [Castle.ActiveRecord.DB1];
GO USE [Castle.ActiveRecord.DB1]
GO
/****** Object: Table [dbo].[Post] Script Date: 09/25/2016 16:46:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Post](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Subject] [nvarchar](64) NULL,
[Text] [nvarchar](1024) NULL,
[DateAdded] [datetime] NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'自增主键' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Post', @level2type=N'COLUMN',@level2name=N'Id'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'主题' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Post', @level2type=N'COLUMN',@level2name=N'Subject'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'内容' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Post', @level2type=N'COLUMN',@level2name=N'Text'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'添加日期' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Post', @level2type=N'COLUMN',@level2name=N'DateAdded'
GO
SET IDENTITY_INSERT [dbo].[Post] ON
INSERT [dbo].[Post] ([Id], [Subject], [Text], [DateAdded]) VALUES (1, N'新闻', N'最新新闻内容', '2016-09-01')
INSERT [dbo].[Post] ([Id], [Subject], [Text], [DateAdded]) VALUES (2, N'音乐', N'流行音乐', '2016-09-02')
SET IDENTITY_INSERT [dbo].[Post] OFF --新建数据库Castle.ActiveRecord.DB2
CREATE DATABASE [Castle.ActiveRecord.DB2];
GO USE [Castle.ActiveRecord.DB2]
GO
/****** Object: Table [dbo].[Post] Script Date: 09/25/2016 16:53:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Post](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Subject] [nvarchar](64) NULL,
[Text] [nvarchar](1024) NULL,
[DateAdded] [datetime] NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'自增主键' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Post', @level2type=N'COLUMN',@level2name=N'Id'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'主题' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Post', @level2type=N'COLUMN',@level2name=N'Subject'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'内容' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Post', @level2type=N'COLUMN',@level2name=N'Text'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'添加日期' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Post', @level2type=N'COLUMN',@level2name=N'DateAdded'
GO
SET IDENTITY_INSERT [dbo].[Post] ON
INSERT [dbo].[Post] ([Id], [Subject], [Text], [DateAdded]) VALUES (1, N'小说', N'纪实小说', '2016-09-03')
INSERT [dbo].[Post] ([Id], [Subject], [Text], [DateAdded]) VALUES (2, N'电脑', N'超极本', '2016-09-04')
SET IDENTITY_INSERT [dbo].[Post] OFF
3.新建MVC项目ActiveRecord.Demo,新建类库Castle.ActiveRecord.DB1.Models,类库Castle.ActiveRecord.DB2.Models
- MVC项目ActiveRecord.Demo文件添加Castle.ActiveRecord框架dll引用,使用NuGut搜索添加.添加对类库Castle.ActiveRecord.DB1.Models,类库Castle.ActiveRecord.DB2.Models的引用。
 - 类库Castle.ActiveRecord.DB1.Models,类库Castle.ActiveRecord.DB2.Models添加Castle.ActiveRecord、NHibernate引用。
 

4.Castle.ActiveRecord.DB1.Models类库添加DB1ActiveRecordBase抽象类文件,继承自ActiveRecordBase基类.
添加Post类,继承自DB1ActiveRecordBase抽象类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Castle.ActiveRecord.DB1.Models
{
public abstract class DB1ActiveRecordBase : ActiveRecordBase
{ }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Castle.ActiveRecord.DB1.Models
{
[ActiveRecord("Post")]
public class Post : DB1ActiveRecordBase
{
/// <summary>
/// 自增主键
/// </summary>
[PrimaryKey(PrimaryKeyType.Identity, Column = "Id")]
public int Id { set; get; } /// <summary>
/// 主题
/// </summary>
[Property("Subject")]
public string Subject { set; get; } /// <summary>
/// 内容
/// </summary>
[Property("Text")]
public string Text { set; get; } /// <summary>
/// 添加日期
/// </summary>
[Property("DateAdded")]
public DateTime DateAdded { set; get; } public static IEnumerable<Post> FindAllBy()
{
return FindAll(typeof(Post)).Cast<Post>(); ;
}
}
}
Castle.ActiveRecord.DB2.Models类库添加DB2ActiveRecordBase抽象类文件,继承自ActiveRecordBase基类
添加Post类,继承自DB2ActiveRecordBase抽象类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Castle.ActiveRecord.DB2.Models
{
public abstract class DB2ActiveRecordBase : ActiveRecordBase
{ }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Castle.ActiveRecord.DB2.Models
{
[ActiveRecord("Post")]
public class Post : DB2ActiveRecordBase
{
/// <summary>
/// 自增主键
/// </summary>
[PrimaryKey(PrimaryKeyType.Identity, Column = "Id")]
public int Id { set; get; } /// <summary>
/// 主题
/// </summary>
[Property("Subject")]
public string Subject { set; get; } /// <summary>
/// 内容
/// </summary>
[Property("Text")]
public string Text { set; get; } /// <summary>
/// 添加日期
/// </summary>
[Property("DateAdded")]
public DateTime DateAdded { set; get; } public static IEnumerable<Post> FindAllBy()
{
return FindAll(typeof(Post)).Cast<Post>(); ;
}
}
}
5.MVC项目ActiveRecord.Demo项目Web.config配置多数据库,主要是config节的type的配置
<configSections>
<section name="activerecord"
type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
</configSections> <connectionStrings>
<add name="Castle.ActiveRecord.DB1" connectionString="Data Source=.;Initial Catalog=Castle.ActiveRecord.DB1;Integrated Security=SSPI"/>
<add name="Castle.ActiveRecord.DB2" connectionString="Data Source=.;Initial Catalog=Castle.ActiveRecord.DB2;Integrated Security=SSPI"/>
</connectionStrings>
<activerecord isWeb="true">
<config type="Castle.ActiveRecord.DB1.Models.DB1ActiveRecordBase,Castle.ActiveRecord.DB1.Models">
<add key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="dialect" value="NHibernate.Dialect.MsSql2005Dialect" />
<add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="connection.connection_string_name" value="Castle.ActiveRecord.DB1" />
<add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle" />
</config>
<config type="Castle.ActiveRecord.DB2.Models.DB2ActiveRecordBase,Castle.ActiveRecord.DB2.Models">
<add key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="dialect" value="NHibernate.Dialect.MsSql2005Dialect" />
<add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="connection.connection_string_name" value="Castle.ActiveRecord.DB2" />
<add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle" />
</config>
</activerecord>

6.ActiveRecord.Demo项目Global文件Application_Start()方法中初始化ActiveRecord配置
using Castle.ActiveRecord;
using Castle.ActiveRecord.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing; namespace ActiveRecord.Demo
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles); InitActiveRecord();
} private void InitActiveRecord()
{
IConfigurationSource source = System.Configuration.ConfigurationManager.GetSection("activerecord") as IConfigurationSource;
ActiveRecordStarter.Initialize(source,
typeof(Castle.ActiveRecord.DB1.Models.DB1ActiveRecordBase),
typeof(Castle.ActiveRecord.DB1.Models.Post), typeof(Castle.ActiveRecord.DB2.Models.DB2ActiveRecordBase),
typeof(Castle.ActiveRecord.DB2.Models.Post)
);
}
}
}
7.配置现在完成,增加控制器视图,进行两个数据库中Post表数据的显示
新增控制器DB1PostController
using Castle.ActiveRecord.DB1.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace ActiveRecord.Demo.Controllers
{
public class DB1PostController : Controller
{
// GET: DB1Post
public ActionResult Index()
{
IEnumerable<Post> post = Post.FindAllBy(); return View(post);
}
}
}
对应视图:
@using Castle.ActiveRecord.DB1.Models
@model IEnumerable<Post>
@{
ViewBag.Title = "DB1-Post";
} <h2>DB1-Post</h2>
<table class="table">
<thead>
<tr>
<th>主键</th>
<th>主题</th>
<th>内容</th>
<th>创建日期</th>
</tr>
</thead>
<tbody>
@foreach (var m in Model)
{
<tr>
<td>@m.Id</td>
<td>@m.Subject</td>
<td>@m.Text</td>
<td>@m.DateAdded</td>
</tr>
}
</tbody>
</table>
新增控制器DB2PostController
using Castle.ActiveRecord.DB2.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace ActiveRecord.Demo.Controllers
{
public class DB2PostController : Controller
{
// GET: DB2Post
public ActionResult Index()
{
IEnumerable<Post> post = Post.FindAllBy(); return View(post);
}
}
}
对应视图:
@using Castle.ActiveRecord.DB2.Models
@model IEnumerable<Post>
@{
ViewBag.Title = "DB2-Post";
} <h2>DB2-Post</h2>
<table class="table">
<thead>
<tr>
<th>主键</th>
<th>主题</th>
<th>内容</th>
<th>创建日期</th>
</tr>
</thead>
<tbody>
@foreach (var m in Model)
{
<tr>
<td>@m.Id</td>
<td>@m.Subject</td>
<td>@m.Text</td>
<td>@m.DateAdded</td>
</tr>
}
</tbody>
</table>
8.修改_Layout.cshtml,添加链接进行DB1数据库、DB2数据库表Post数据的显示
 <li>@Html.ActionLink("DB1-Post", "Index", "DB1Post")</li>
 <li>@Html.ActionLink("DB2-Post", "Index", "DB2Post")</li>

运行后效果:


Castle.ActiveRecord多数据库配置的更多相关文章
- Castle连接多数据库配置
		
ActiveRecord 的多数据库配置基本沿袭了 NHibernate 的思想,只不过在配置文件结构上作了些调整.1. 采用继承方式,归纳使用同一数据库的类型.比如 A.B.C.D.E 中 A.B连 ...
 - ActiveRecord多数据库配置
		
ActiveRecord 的多数据库配置基本沿袭了 NHibernate 的思想,只不过在配置文件结构上作了些调整.NHibernate的配置也是基于配置得来的,配置多个SessionFactory传 ...
 - Castle ActiveRecord学习(二)配置、引用、程序启动
		
来源:http://www.cnblogs.com/zxj159/p/4082987.html 配置数据库驱动: Model层引用:Castle.ActiveRecord.dll.NHibernate ...
 - Castle ActiveRecord配置中需要注意的地方
		
关于Castle 的开发可参考李会军老师的Castle 开发系列文章,里面有关于ActiveRecord学习实践系列和Castle IOC容器系列两个部分,是比较好的教程. 这里主要说明在Castle ...
 - 记录Castle ActiveRecord访问Sqlite的配置
		
1.ActiveRecord配置文件ARConfig.xml,并将配置文件的“生成操作”改成“嵌入的资源” <?xml version=; i < ; i++) { ...
 - Castle ActiveRecord框架学习(一)
		
一.Active Record(活动记录)模式 Active Record是业务逻辑层中(<企业应用架构模式>将该模式归为数据源模式)常用的一种框架模式,尤其在底层数据库模型匹配业务模型时 ...
 - Castle ActiveRecord学习(三)数据映射及特性描述
		
Model中的Demo: using Castle.ActiveRecord; using Castle.ActiveRecord.Queries; using System; using Syste ...
 - Castle ActiveRecord学习(一)简介
		
简介 来源:http://www.cnblogs.com/zxj159/p/4082987.html 一.Active Record(活动记录)模式 Active Record是业务逻辑层中(< ...
 - Castle ActiveRecord框架学习(二):快速搭建简单博客网站
		
一.数据库 1.数据表 Category:类别标签表(字段Type=1为类别,Type=2为标签) Category_Post:类别标签与文章中间表 Post:文章表 Comment:评论表 2.数据 ...
 
随机推荐
- 【腾讯Bugly干货分享】让 CodeReview 这股清流再飞一会儿
			
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/ToYeT4Y4pzx0ii9Z92fo-Q 作者:刘 ...
 - .Net开发笔记(十四) 基于“泵”的UDP通信(接上篇)
			
上一篇中说到了“泵”在编程中的作用以及一些具体用处,但没有实际demo,可能不好理解,这篇文章我分享一个UDP通信的demo,大概实现了类似“飞鸽传书”在局域网中文本消息和文件传输的功能.功能不全也不 ...
 - 用chrome来映射查找样式对应的sass
			
较新版本的sass(3.3+)支持source-map功能,可以配合谷歌浏览器或者livestyle来映射查找对应的样式. 要生成source-map可以在grunt中使用 grunt-contrib ...
 - C语言  ·  最小乘积(基本型)
			
问题描述 给两组数,各n个. 请调整每组数的排列顺序,使得两组数据相同下标元素对应相乘,然后相加的和最小.要求程序输出这个最小值. 例如两组数分别为:1 3 -5和-2 4 1 那么对应乘积取和的最小 ...
 - Html5 设置菱形链接菜单
			
本例是采用html5+css3.0设置的菜单链接.其中主要用到了以下几个方面: 1. CSS3.0中的2D变换,如:旋转transform:rotate(45deg);移动,放大transform:r ...
 - Html5绘制时钟
			
最近在对Html5比较感兴趣,就用空闲时间做一些小例子进行练习,今天绘制一个走动的时钟,具体如下图所示: 具体思路在上图已有说明,代码如下: <script type="text/ja ...
 - LInux 安装东西
			
本机 PHP 安装 ./configure --prefix=/usr/local/php5 --with-gd --enable-gd-native-ttf --enable-gd-jis-co ...
 - Hello Blog
			
转眼之间,工作已经快五年了. 五年走的时候不觉得,当真正过来了,一回头,才真正体会到什么叫时间匆匆. 做了五年的技术,算是多有波折.想一想,做技术真的挺需要耐得住寂寞的,毕竟花花世界,压力太大,诱惑太 ...
 - 我为NET狂-----大前端专帖
			
http://dnt.dkill.net/Article/Detail/321 本来前端的东西是不想开个专贴的,这样网友容易产生依赖,前端的东西看看书,平时仿照几个网站,遇到问题再调调增加点经验,基本 ...
 - NodeJS POST Request Over JSON-RPC
			
1.npm install art-template2.npm install request3.在app.js中加入以下代码转html: var template = require('art-t ...