- 浏览: 246661 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (293)
- web (1)
- [随笔分类]项目管理 (30)
- [随笔分类]WCF (14)
- 未分类 (1)
- [随笔分类]Linq (4)
- [随笔分类]C#基础 (24)
- 项目 (1)
- [网站分类]3.非技术区(技术之外的文章,但不要涉及任何政治内容) (8)
- [网站分类]1.首页原创精华.NET区(包含架构设计、设计模式)(对首页文章的要求:原创、高质量、经过认真思考并精心写作) (9)
- [随笔分类]Ubuntu (4)
- ASP.Net (1)
- [网站分类]2..NET新手区(用于发表不合适发表在首页的.NET技术文章,包括小经验、小技巧) (30)
- [随笔分类]ASP.NET MVC (20)
- [随笔分类]ASP.NET (3)
- [随笔分类]程序员厨房 (4)
- [随笔分类]英语学习 (28)
- [网站分类]4.其他技术区 (1)
- [随笔分类]Silverlight (12)
- [随笔分类]CodeSmith (8)
- [随笔分类]其他 (4)
- [随笔分类]Ruby (4)
- [发布至博客园首页] (34)
- [网站分类]其他技术区 (3)
- [随笔分类]Ruby on Rails (2)
- [网站分类].NET新手区 (33)
- [随笔分类]TDD (1)
- [随笔分类]不谈技术 (2)
- [网站分类]非技术区 (7)
最新评论
-
yicone:
You make a mistake when paste t ...
WCF步步为营(一):简单示例 -
jinweijie:
你好,这个实现不错,但是在用了scriptmanager以后就 ...
在服务器端保存ViewState
本篇演示一对多关系,和两个表联合查询。
使用已有数据库,我们演示一个家庭理财的小程序
本文参考Teddy's Knowledge Base的相关文章,这篇文章只演示单表操作.
Step1: 创建数据库Family
Account表:记录每一笔消费,列ConsumeCategory是消费的类别。
ConsumeCatagory表:消费类别。
ConsumeCatagory----Account(1:n)
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->
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 (1, 1) NOT 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 (1, 1) NOT 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文件
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><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文件,内容如下:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><?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.将会得到下面的代码:
生成实体如下
{
[PrimaryKey]
int ID { get; }
int? ConsumeCatagory { get; set; }
DateTime? ConsumeDateTime { get; set; }
decimal? ConsumeMoney { get; set; }
[SqlType("ntext")]
string ConsumeDescription { get; set; }
[SqlType("nchar(10)")]
string ConsumeUser { get; set; }
[SqlType("nchar(10)")]
string ConsumeType { get; set; }
}
public interface ConsumeCatagory : Entity
{
[PrimaryKey]
int ID { get; }
[SqlType("nvarchar(50)")]
string Type { get; set; }
[SqlType("nvarchar(50)")]
string Description { get; set; }
}
拷贝上面的代码到EntityDesigns.cs,为EntityDesigns添加NBear.Common.Design引用.
修改EntityDesigns.cs实体为
{
[PrimaryKey]
int ID { get; }
//int? ConsumeCatagory { get; set; }
DateTime? ConsumeDateTime { get; set; }
decimal? ConsumeMoney { get; set; }
[SqlType("ntext")]
string ConsumeDescription { get; set; }
[SqlType("nchar(10)")]
string ConsumeUser { get; set; }
[SqlType("nchar(10)")]
string ConsumeType { get; set; }
[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 { get; set; }
[SqlType("nvarchar(50)")]
string Description { get; set; }
[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显示消费明细。代码如下
aspx页面的设置
运行得到如下界面
我们为什看到上面消费明细里的类别显示的是类别名,而不是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属性就可以了。(奇怪为什么需要注释掉,或者还有别的办法?)
现在我们假如想得到买菜类别的所有消费,我们只需这样
发表评论
-
ASP.Net2.0使用Log4Net(一)
2007-11-24 15:40 1088第一种方法 在web.config中写配置文件 Log4 ... -
ASP.Net2.0使用Log4Net(二)
2007-11-24 17:39 876(二)使用单独的配置文件,不放在web.config里 1. ... -
UML学习笔记
2007-11-25 09:55 636一、UML中的关系 依赖: 如果对象X发生变化,引起另一个对 ... -
NBear学习笔记(一)
2007-12-01 21:14 593使用已有数据库。(之前先设计实体,再自动生成数据库,发现每次 ... -
NBear学习笔记(三)
2007-12-04 22:11 738上一篇一对多的关系说的不是很清楚,这篇补充一下。 这篇我们创建 ... -
CSS使用总结
2007-12-12 21:10 652在分配ID和类名时,尽可能保持与表现形式无关,例如con ... -
ASP.NET2.0缓存技术
2007-12-12 23:33 642ASP.NET2.0提供如下缓存方式: Output Ca ... -
VS2008正式版创建silverlight项目失败的解决办法
2008-02-16 09:49 783安装microsoft express blend2 最新的试 ... -
vista英文版语言包安装
2008-02-17 21:35 792最近,需要给老外截英 ... -
SilverLight显示中文字(一)
2008-02-18 14:42 890我们知道silverlight只提供了一下几种字体, 当我们 ... -
silverlight显示中文字(二):使用TextBlock+Downloader
2008-02-18 16:39 1051(一),建立一个Silverlight1.0 site. ... -
SilverLight显示中文字(三) :使用Path和图形
2008-02-18 16:59 773使用path将文字转换为路径 用Direct select ... -
在Silverlight1.1中定义与调用Javascript事件的方法
2008-02-20 13:19 873我们在silverlight1.0 想调用javascrip ... -
在线流程图制作工具
2008-02-26 22:32 15211. DrawAnywhere , 的在线流程图制作工具。 D ... -
VS2008下开发ASP.Net2.0 and AJAX1.0的程序
2008-03-05 13:57 893为什么要在vs2008下开发A ... -
VS2008开发Silverlight2程序:环境安装
2008-03-06 13:36 1018微软在MIX08大会,发布了Silverlight 2 Bet ... -
ASP.NET 2.0 XML 系列(1): XML介绍
2008-03-15 12:40 6721.1 简介 XML的一个强大 ... -
ASP.NET 2.0 XML 系列(2): XML技术
2008-03-15 14:13 3621. DTD XML最强大之处是允许自定义标签,但是对 ... -
ASP.NET 2.0 XML 系列(3): .Net Framework中XML类
2008-03-15 14:52 500System.Xml包含了一些和XML文档的读写操作相关的类, ... -
ASP.NET 2.0 XML 系列(4):用XmlReader类介绍
2008-03-15 16:02 719(本文摘自MSDN) XmlReader 类是一个提供 ...
相关推荐
.net编程里面的NBear2.5.0框架
** 请修改扩展名为ZIP Nbear V3.7.2源代码 类库 VS插件等
NBear初始化时,便把configuration\connectionStrings节点下的所有数据库连接构建出来
Nbear ORM 开源框架
Nbear使用手册(版本: 2.4.1)
封装对数据库的查询,低版本,高效率,有不懂可相互切磋
NBear原名Ilungasoft Framework,是主要有Teddy开发的一个基于.Net 2.0 (C# 2.0, ASP.NET 2.0)的快速开发框架,她将使您基于.Net 2.0的web/winform/distributed开发变得异常高效、性能卓越。
使用NBear项目模板快速建立项目框架,通过这个模板你就像建.net项目一样,快速建立项目相关的文件上。NBear的相关配置文件,试一下你就知道了。
Inside NBear Starter Kit (二) 不使用附带数据库的安装方法.mht
NBear+NBear开发BBS系统源码_nbearbbs
nbear框架的介绍
最新的Nbear教程,另你可以1天之内学会Nbear。
NBear3.6.6,里面含源代码和各种工具。
NBear 开发平台源码与帮助文档 (附带案例)
ASP.NET-[论坛社区]NBear+NBear开发BBS系统源码.zip
NBear的核心包括一个泛型、强类型的的数据持久化接口、一组接口式的Entity定义组件、高性能XML/JSON序列化支持、服务工厂、分布式服务队列和Web组件
NBear是一个基于.Net 2.0、C#2.0开放全部源代码的的软件开发框架类库。NBear的设计目标是尽最大努力减少开发人员的工作量,最大程度提升开发效率,同时兼顾性能及可伸缩性。
ASP.NET源码——[论坛社区]NBear+NBear开发BBS系统源码.zip
很简单,根据aspxcn提供的源码,自己又做了一个小案例。其中就是实现了NBear和 Anthem控件。其中还有很多Bug,代码只是实现了某些功能而已,感兴趣的可以自己再优化,调试。