`
wangdeshui
  • 浏览: 255548 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

本篇演示一对多关系,和两个表联合查询。

使用已有数据库,我们演示一个家庭理财的小程序

本文参考Teddy's Knowledge Base的相关文章,这篇文章只演示单表操作.

Step1: 创建数据库Family

Account表:记录每一笔消费,列ConsumeCategory是消费的类别。

ConsumeCatagory表:消费类别。

ConsumeCatagory----Account(1:n)

<!---->

    
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_Account_AccountType]')
           and OBJECTPROPERTY(id, N'IsForeignKey'= 1)
    
ALTER TABLE [dbo].[Consume] DROP CONSTRAINT FK_Account_AccountType
    
GO

    
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Consume]')
        
and OBJECTPROPERTY(id, N'IsUserTable'= 1)
    
drop table [dbo].[Consume]
    
GO

    
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ConsumeCatagory]')
        
and OBJECTPROPERTY(id, N'IsUserTable'= 1)
    
drop table [dbo].[ConsumeCatagory]
    
GO

    
CREATE TABLE [dbo].[Consume] (
        
[ID] [int] IDENTITY (11NOT NULL ,
        
[ConsumeCatagory] [int] NULL ,
        
[ConsumeDateTime] [datetime] NULL ,
        
[ConsumeMoney] [money] NULL ,
        
[ConsumeDescription] [ntext] COLLATE Chinese_PRC_CI_AS NULL ,
        
[ConsumeUser] [nchar] (10) COLLATE Chinese_PRC_CI_AS NULL ,
        
[ConsumeType] [nchar] (10) COLLATE Chinese_PRC_CI_AS NULL
    ) 
ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
GO

    
CREATE TABLE [dbo].[ConsumeCatagory] (
        
[ID] [int] IDENTITY (11NOT NULL ,
        
[Type] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
        
[Description] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL
    ) 
ON [PRIMARY]
    
GO

    
ALTER TABLE [dbo].[Consume] ADD
        
CONSTRAINT [PK_Account] PRIMARY KEY  CLUSTERED
        (
            
[ID]
        )  
ON [PRIMARY]
    
GO

    
ALTER TABLE [dbo].[ConsumeCatagory] ADD
        
CONSTRAINT [PK_AccountType] PRIMARY KEY  CLUSTERED
        (
            
[ID]
        )  
ON [PRIMARY]
    
GO

    
ALTER TABLE [dbo].[Consume] ADD
        
CONSTRAINT [FK_Account_AccountType] FOREIGN KEY
        (
            
[ConsumeCatagory]
        ) 
REFERENCES [dbo].[ConsumeCatagory] (
            
[ID]
        )
    
GO

Step2:

         (1)安装下载的Nbear组件下dist\SetupNBearVsPlugin.exe插件(可自动生成实体类)

         (2)打开VS2005,新建一个空的解决方案,添加两个C#类库工程EntityDesigns和Entities,删除自动生成的class1.cs.

         (3)添加一个website的网站项目。

         (4)在Entities下添加Entities.cs, 在网站根目录下添加web.config文件和EntityConfig.xml文件.

         (5)修改web.config文件

<!----><configSections>
<section name="entityConfig" type="NBear.Common.EntityConfigurationSection, NBear.Common"/>
</configSections>
<entityConfig>
<includes>
<add key="Sample Entity Config" value="~/EntityConfig.xml"/>
</includes>
</entityConfig>
<appSettings/>
<connectionStrings>
<add name="DbName" connectionString="Server=WDS;Database=NBearDB;Uid=sa;Pwd=sa"
       providerName
="NBear.Data.SqlServer.SqlDbProvider"/>
</connectionStrings>

(6)在EntityDesigns目录下添加EntityDesignToEntityConfig.xml文件,内容如下:

<!----><?xml version="1.0" encoding="utf-8" ?>
<EntityDesignToEntityConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xsd
="http://www.w3.org/2001/XMLSchema">
<CompileMode>Debug</CompileMode>
<InputDllName>EntityDesigns.dll</InputDllName>   //实体设计类
<OutputNamespace>Entities</OutputNamespace>  //实体类
<OutputLanguage>C#</OutputLanguage>              //输出语言
<!--<OutputCodeFileEncoding>utf-8</OutputCodeFileEncoding>-->
<EntityCodePath>..\Entities\Entities.cs</EntityCodePath>   //实体类文件
<EntityConfigPath>..\website\EntityConfig.xml</EntityConfigPath>
<SqlSync enable="false">    //更改实体时,是否同步更新数据库,建议设为false,否则将清空现有数据库的数据
<SqlServerFolder>C:\Program Files\Microsoft SQL Server\80\Tools\Binn</SqlServerFolder>
<ServerName>WDS</ServerName>
<UserID>sa</UserID>
<Password>sa</Password>
<DatabaseName>NBearDB</DatabaseName>
</SqlSync>
</EntityDesignToEntityConfiguration>

(7)在EntityDesigns目录下添加EntityDesigns.cs

(8)打开下载的Nbear组件下dist\NBear.Tools.DbToEntityDesign.exe程序 ,设置连接字符串,我的是这样:

   Server=WDS;Database=NBearDB;Uid=sa;Pwd=sa  点击connect, 选择要生成的表,点击Generate Entities Design.将会得到下面的代码:

  生成实体如下


<!---->public interface Consume : Entity
{
    [PrimaryKey]
    
int ID { get; }
    
int? ConsumeCatagory { getset; }
    DateTime
? ConsumeDateTime { getset; }
    
decimal? ConsumeMoney { getset; }
    [SqlType(
"ntext")]
    
string ConsumeDescription { getset; }
    [SqlType(
"nchar(10)")]
    
string ConsumeUser { getset; }
    [SqlType(
"nchar(10)")]
    
string ConsumeType { getset; }
}

public interface ConsumeCatagory : Entity
{
    [PrimaryKey]
    
int ID { get; }
    [SqlType(
"nvarchar(50)")]
    
string Type { getset; }
    [SqlType(
"nvarchar(50)")]
    
string Description { getset; }
}

拷贝上面的代码到EntityDesigns.cs,为EntityDesigns添加NBear.Common.Design引用.

修改EntityDesigns.cs实体为


<!---->public interface Consume : Entity
    {
        [PrimaryKey]
        
int ID { get; }
        
//int? ConsumeCatagory { get; set; }
        DateTime? ConsumeDateTime { getset; }
        
decimal? ConsumeMoney { getset; }
        [SqlType(
"ntext")]
        
string ConsumeDescription { getset; }
        [SqlType(
"nchar(10)")]
        
string ConsumeUser { getset; }
        [SqlType(
"nchar(10)")]
        
string ConsumeType { getset; }

        [FkReverseQuery(LazyLoad 
= true)]              //这句指明可反向查询,如可直接得到consume对象catagory.Type
        [MappingName("ConsumeCatagory")]           //只根据consume实体的ConsumeCatagory来关联,既ConsumeCatagory是外键。
        ConsumeCatagory catagory
        {
            
get;
            
set;
        }
    }

    
public interface ConsumeCatagory : Entity
    {
        [PrimaryKey]
        
int ID { get; }
        [SqlType(
"nvarchar(50)")]
        
string Type { getset; }
        [SqlType(
"nvarchar(50)")]
        
string Description { getset; }

        [FkQuery(
"ConsumeCatagory")]      //根据Consume实体的ConsumeCatagory属性来关联
        Consume[] consume
        {
            
get;
            
set;
        }
    }

(9)编译EntityDesigns工程,编译成功,刚才添加Entities.cs,EntityConfig.xml文件将被自动填入正确的内容。

(10)为Entities工程引用NBear.Common,然后编译Entities工程。

(11)为WebSite添加Entities项目编译后的Entities.dll.再引用NBear.Data

(12)开始使用设计好的实体。

在default页添加两个gridview,  gvdAccountType显示消费类别, gvdAccount显示消费明细。代码如下

image

aspx页面的设置

image 

运行得到如下界面

image

image

我们为什看到上面消费明细里的类别显示的是类别名,而不是1,2,3,4呢?是因为我们利用实体关系进行了自动的联合查询,

绑定时我们绑定到Consume实体的catagory属性的Type属性就可以了(上面代码突出显示红色的地方)。

注:当我为Consume实体加上

       [FkReverseQuery(LazyLoad = true)]           
        [MappingName("ConsumeCatagory")]
        ConsumeCatagory catagory
        {
            get;
            set;
        }

   以上代码时,我必须注释掉 int? ConsumeCatagory { get; set; }这句,不然添加数据会出错。

  现在我们添加一条类别为买菜的数据时只能这样(不能直接这样用today.ConsumeCatagory=1, 因为已经没有这个属性了),我们得先找到类别为买菜的对象,然后付给consume对象的catagory属性就可以了。(奇怪为什么需要注释掉,或者还有别的办法?)


image

image

现在我们假如想得到买菜类别的所有消费,我们只需这样

image

分享到:
评论

相关推荐

    NBear

    NBear是.NET平台上的一个高性能、轻量级的ORM(对象关系映射)框架,它在.NET编程领域中被广泛使用。NBear2.5.0版本是该框架的一个重要迭代,提供了许多新特性和改进,旨在提升开发效率并优化数据库操作性能。 首先...

    ASP.NET框架:NBear

    它支持一级缓存和二级缓存,可以根据实际需求配置缓存策略。 3. **事务管理**:NBear支持事务处理,可以方便地进行数据库操作的回滚和提交,确保数据的一致性和完整性。 4. **查询优化**:尽管NBear提供了一种面向...

    NBear访问多个数据库

    标题中的“NBear访问多个数据库”指的是使用NBear框架在应用程序中实现对多个数据库的并发访问。NBear是一个开源的.NET ORM(对象关系映射)框架,它提供了一种高效、灵活的方式来操作数据库,而无需编写大量的SQL...

    Nbear

    ** 请修改扩展名为ZIP Nbear V3.7.2源代码 类库 VS插件等

    Nbear ORM

    **Nbear ORM 开源框架详解** NBear ORM(Object-Relational Mapping)是一个高效、灵活且功能强大的.NET数据访问框架,旨在简化.NET开发者与数据库之间的交互。它通过提供对象关系映射功能,使得开发人员可以使用...

    使用NBear项目模板快速建立项目框架

    而".swf"文件可能是相关的演示或教程视频,通过视觉展示帮助用户更好地理解和学习使用NBear模板的过程。 总的来说,NBear项目模板是一个强大的工具,它简化了.NET项目的初始构建步骤,使开发者能够更快地投入到实际...

    Nbear使用手册

    Nbear使用手册(版本: 2.4.1)

    nbear_petshop.1.0.0

    《NBear框架详解——以nbear_petshop.1.0.0为例》 NBear框架,作为一款基于C#语言的高性能、轻量...通过对这个项目的深入学习,开发者不仅可以掌握NBear的基本用法,还能进一步理解ORM在实际项目中的价值和应用技巧。

    快速开发框架设计NBear V3.3.9 Stable

    NBear原名Ilungasoft Framework,是主要有Teddy开发的一个基于.Net 2.0 (C# 2.0, ASP.NET 2.0)的快速开发框架,她将使您基于.Net 2.0的web/winform/distributed开发变得异常高效、性能卓越。

    NBear源码与帮助文档

    学习NBear首先需要理解ORM的基本概念,然后通过官方文档学习其API和用法。对于初学者,可以从简单的CRUD操作开始,逐步掌握高级特性和最佳实践。同时,案例代码是理解和应用NBear的关键,通过分析和运行这些案例,...

    Nbear中文帮助手册

    《NBear中文帮助手册》是针对NBear框架的详尽指南,它涵盖了NBear的核心功能和使用方法。NBear是一个全面的.NET开发框架,旨在提供高效、便捷的数据持久化、序列化以及服务处理能力,特别适合ASP.NET开发环境。下面...

    NBear+Anthem 应用案列

    开发者可以通过分析这个文件,学习如何配置NBear以连接数据库,如何定义实体类来映射数据库表,以及如何使用NBear的API进行数据操作。 总的来说,NBear+Anthem的应用案例提供了一个实战的学习平台,展示了这两个...

    NBear3.6.6

    - **学习与定制**:提供源代码意味着用户可以深入了解NBear的内部实现,对于优化性能或根据特定需求进行定制非常有帮助。 - **调试与问题解决**:遇到问题时,可以直接查看源代码,有助于快速定位和解决问题。 3....

    Inside NBear Starter Kit (二) 不使用附带数据的安装方法.mht

    Inside NBear Starter Kit (二) 不使用附带数据库的安装方法.mht

    NBear+NBear开发BBS系统源码_nbearbbs.zip

    NBear是一个高性能、轻量级且易于使用的.NET框架,它主要设计用于简化数据库访问和对象关系映射(ORM)。NBear BBS系统源码提供了一个实际应用示例,展示了如何利用NBear框架来构建一个论坛社区系统。在这个系统中,...

    ASP.NET-[论坛社区]NBear+NBear开发BBS系统源码.zip

    源码分析和学习"ASP.NET-[论坛社区]NBBear+NBBear开发BBS系统源码_nbearbbs.rar",可以帮助开发者深入了解ASP.NET和NBear的结合使用,理解如何在实际项目中应用ORM框架,提高开发效率,同时也可以学习到论坛系统的...

    NBearV3.rar_nbear

    NBear是一款专为.NET 2.0和C#2.0设计的开源软件开发框架,其核心目的是简化开发流程,提高开发效率,并确保系统具备良好的性能和可扩展性。NBear不仅提供了丰富的类库,还开放了全部源代码,允许开发者深入理解其...

    asp.net 优秀框架NBearV3.5.6_binary

    总之,NBear是一款强大的ORM工具,尽管在某些特定情况下可能存在一定的学习曲线,但其性能和灵活性使其成为ASP.NET开发中的有力选择。通过深入理解和熟练运用NBear,开发者可以提升开发效率,减少对数据库底层操作的...

    最新的Nbear中文教程

    最新的Nbear教程,另你可以1天之内学会Nbear。

    Ilungasoft Framework 正式更名为 NBear

    8. **文档与社区**:开源项目往往有详细的文档和活跃的社区支持,用户可以从中学习和寻求帮助。 对于想要使用或研究NBear框架的开发者来说,深入了解这些知识点,结合官方文档、博客文章(如博文链接给出的ITEYE...

Global site tag (gtag.js) - Google Analytics