Castle.ActiveRecord多数据库配置
Posted pengtan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Castle.ActiveRecord多数据库配置相关的知识,希望对你有一定的参考价值。
最近使用Castle.ActiveRecord框架,网上关于多数据支持的文章很少,因此有了这篇博文的产生。
-
开发工具VS2015,Sql Server2008R2
-
新建数据库,数据初始化脚本如下:
1 --新建数据库Castle.ActiveRecord.DB1 2 CREATE DATABASE [Castle.ActiveRecord.DB1]; 3 GO 4 5 USE [Castle.ActiveRecord.DB1] 6 GO 7 /****** Object: Table [dbo].[Post] Script Date: 09/25/2016 16:46:21 ******/ 8 SET ANSI_NULLS ON 9 GO 10 SET QUOTED_IDENTIFIER ON 11 GO 12 CREATE TABLE [dbo].[Post]( 13 [Id] [int] IDENTITY(1,1) NOT NULL, 14 [Subject] [nvarchar](64) NULL, 15 [Text] [nvarchar](1024) NULL, 16 [DateAdded] [datetime] NULL, 17 PRIMARY KEY CLUSTERED 18 ( 19 [Id] ASC 20 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 21 ) ON [PRIMARY] 22 GO 23 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\' 24 GO 25 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\' 26 GO 27 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\' 28 GO 29 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\' 30 GO 31 SET IDENTITY_INSERT [dbo].[Post] ON 32 INSERT [dbo].[Post] ([Id], [Subject], [Text], [DateAdded]) VALUES (1, N\'新闻\', N\'最新新闻内容\', \'2016-09-01\') 33 INSERT [dbo].[Post] ([Id], [Subject], [Text], [DateAdded]) VALUES (2, N\'音乐\', N\'流行音乐\', \'2016-09-02\') 34 SET IDENTITY_INSERT [dbo].[Post] OFF 35 36 --新建数据库Castle.ActiveRecord.DB2 37 CREATE DATABASE [Castle.ActiveRecord.DB2]; 38 GO 39 40 USE [Castle.ActiveRecord.DB2] 41 GO 42 /****** Object: Table [dbo].[Post] Script Date: 09/25/2016 16:53:05 ******/ 43 SET ANSI_NULLS ON 44 GO 45 SET QUOTED_IDENTIFIER ON 46 GO 47 CREATE TABLE [dbo].[Post]( 48 [Id] [int] IDENTITY(1,1) NOT NULL, 49 [Subject] [nvarchar](64) NULL, 50 [Text] [nvarchar](1024) NULL, 51 [DateAdded] [datetime] NULL, 52 PRIMARY KEY CLUSTERED 53 ( 54 [Id] ASC 55 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 56 ) ON [PRIMARY] 57 GO 58 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\' 59 GO 60 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\' 61 GO 62 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\' 63 GO 64 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\' 65 GO 66 SET IDENTITY_INSERT [dbo].[Post] ON 67 INSERT [dbo].[Post] ([Id], [Subject], [Text], [DateAdded]) VALUES (1, N\'小说\', N\'纪实小说\', \'2016-09-03\') 68 INSERT [dbo].[Post] ([Id], [Subject], [Text], [DateAdded]) VALUES (2, N\'电脑\', N\'超极本\', \'2016-09-04\') 69 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抽象类
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Castle.ActiveRecord.DB1.Models 8 { 9 public abstract class DB1ActiveRecordBase : ActiveRecordBase 10 { 11 12 } 13 }
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Castle.ActiveRecord.DB1.Models 8 { 9 [ActiveRecord("Post")] 10 public class Post : DB1ActiveRecordBase 11 { 12 /// <summary> 13 /// 自增主键 14 /// </summary> 15 [PrimaryKey(PrimaryKeyType.Identity, Column = "Id")] 16 public int Id { set; get; } 17 18 19 /// <summary> 20 /// 主题 21 /// </summary> 22 [Property("Subject")] 23 public string Subject { set; get; } 24 25 26 /// <summary> 27 /// 内容 28 /// </summary> 29 [Property("Text")] 30 public string Text { set; get; } 31 32 /// <summary> 33 /// 添加日期 34 /// </summary> 35 [Property("DateAdded")] 36 public DateTime DateAdded { set; get; } 37 38 public static IEnumerable<Post> FindAllBy() 39 { 40 return FindAll(typeof(Post)).Cast<Post>(); ; 41 } 42 } 43 }
Castle.ActiveRecord.DB2.Models类库添加DB2ActiveRecordBase抽象类文件,继承自ActiveRecordBase基类
添加Post类,继承自DB2ActiveRecordBase抽象类
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Castle.ActiveRecord.DB2.Models 8 { 9 public abstract class DB2ActiveRecordBase : ActiveRecordBase 10 { 11 12 } 13 }
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Castle.ActiveRecord.DB2.Models 8 { 9 [ActiveRecord("Post")] 10 public class Post : DB2ActiveRecordBase 11 { 12 /// <summary> 13 /// 自增主键 14 /// </summary> 15 [PrimaryKey(PrimaryKeyType.Identity, Column = "Id")] 16 public int Id { set; get; } 17 18 19 /// <summary> 20 /// 主题 21 /// </summary> 22 [Property("Subject")] 23 public string Subject { set; get; } 24 25 26 /// <summary> 27 /// 内容 28 /// </summary> 29 [Property("Text")] 30 public string Text { set; get; } 31 32 /// <summary> 33 /// 添加日期 34 /// </summary> 35 [Property("DateAdded")] 36 public DateTime DateAdded { set; get; } 37 38 public static IEnumerable<Post> FindAllBy() 39 { 40 return FindAll(typeof(Post)).Cast<Post>(); ; 41 } 42 } 43 }
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" /> Castle ActiveRecord学习Castle ActiveRecord学习笔记三:初始化配置
Castle ActiveRecord / NHibernate - 密码加密或散列