Castle.ActiveRecord多数据库配置

Posted pengtan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Castle.ActiveRecord多数据库配置相关的知识,希望对你有一定的参考价值。

最近使用Castle.ActiveRecord框架,网上关于多数据支持的文章很少,因此有了这篇博文的产生。

  1. 开发工具VS2015,Sql Server2008R2

  2. 新建数据库,数据初始化脚本如下:

 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学习

Castle ActiveRecord / NHibernate - 密码加密或散列

如何为现有数据库生成 Castle ActiveRecord C# 类

Castle ActiveRecord + NHibernate 中的交易傻瓜