惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
L
LINUX DO - 热门话题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
V
V2EX
GbyAI
GbyAI
量子位
Microsoft Azure Blog
Microsoft Azure Blog
有赞技术团队
有赞技术团队
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
B
Blog
Microsoft Security Blog
Microsoft Security Blog
S
SegmentFault 最新的问题
O
OpenAI News
N
News and Events Feed by Topic
博客园 - Franky
爱范儿
爱范儿
Forbes - Security
Forbes - Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V2EX - 技术
V2EX - 技术
Application and Cybersecurity Blog
Application and Cybersecurity Blog
N
News and Events Feed by Topic
N
News | PayPal Newsroom
Schneier on Security
Schneier on Security
Cloudbric
Cloudbric
Security Archives - TechRepublic
Security Archives - TechRepublic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Recent Commits to openclaw:main
Recent Commits to openclaw:main
人人都是产品经理
人人都是产品经理
P
Privacy International News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
D
DataBreaches.Net
Last Week in AI
Last Week in AI
罗磊的独立博客
Spread Privacy
Spread Privacy
Recent Announcements
Recent Announcements
The Cloudflare Blog
Google DeepMind News
Google DeepMind News
AWS News Blog
AWS News Blog
The Register - Security
The Register - Security
Y
Y Combinator Blog
J
Java Code Geeks
I
Intezer

博客园 - sobaby

Sql Server的两个小技巧 用vue.js重构订单计算页面 用vue.js实现购物车功能 一步步实现自己的ORM(五) 一步步实现自己的ORM(四) 将Object转换成Dictionary方法 一步步实现自己的ORM(三) 一步步实现自己的ORM(二) 一步步实现自己的ORM(一) 修复Windows XP服务扩展视图显示空白 ASP.NET MVC :MVC页面验证与授权 一起学习MVC(4)-entity SQL语句 一起学习MVC(2)-数据库设计 一起学习MVC(1)-搭建开发环境 什么是工作流 学习WWF中 关于回调函数 ASP.net:水晶报表的5种表格设计模式 ASP.NET 安全认证(一):如何运用 Form 表单认证
一起学习MVC(3)-搭建项目
sobaby · 2009-01-19 · via 博客园 - sobaby

我们现在来搭建项目,项目使用经典的3层架构user interface,business ,dataaccess.

 首先我们搭建model模型层,这一层我们使用ado.net entity framework,我们选择类库,project名称就叫Model好了。

建好了之后,我们在项目里新增一个Ado.net Entity Data Model实体

然后按照向导完成

最终的试图

上面的图片是不是和我们数据库的关系图一致?如果不清楚数据库关系图,可以查看http://www.cnblogs.com/sobaby/archive/2009/01/19/1378178.html这篇文章

我们用editplus打开刚才建立的edmx文件(也可以用记事本打开)

你会发现该文件包含3个主要部分。

Conceptual Models (CSDL)

Storage Models (SSDL)

Mapping (MSL)

一般情况下,我们没必要手动修改EDMX -XML文件。可视化的EDM 设计器、Mapping Details窗口和Model Browser 窗口包含有上述3个部分,友好地显示整个Entity Data Model模型。

我们看一下模型浏览器(可以在上图里点右键 选中模型浏览器 来查看):

Model Browser窗口以可视的树形图显示概念模型和存储模型。

映射视图:

EDM设计提供了一个不错的映射窗口,将实体映射到表或者视图:

左边是数据库中的字段名和数据类型,右边是对应的c#里的属性名和数据类型

最后我们来看看StoreModel.design.cs文件

首先看到的是下面的代码

[assembly: global::System.Data.Objects.DataClasses.EdmSchemaAttribute()]
[assembly: 
global::System.Data.Objects.DataClasses.EdmRelationshipAttribute("StoreModel""FK_ORDERS_REFERENCE_MEMBERS""Members"global::System.Data.Metadata.Edm.RelationshipMultiplicity.ZeroOrOne, typeof(Model.Members), "Orders"global::System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof(Model.Orders))]
[assembly: 
global::System.Data.Objects.DataClasses.EdmRelationshipAttribute("StoreModel""FK_ORDERDET_REFERENCE_ORDERS""Orders"global::System.Data.Metadata.Edm.RelationshipMultiplicity.ZeroOrOne, typeof(Model.Orders), "OrderDetail"global::System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof(Model.OrderDetail))]
[assembly: 
global::System.Data.Objects.DataClasses.EdmRelationshipAttribute("StoreModel""FK_ORDERDET_REFERENCE_PRODUCTS""Products"global::System.Data.Metadata.Edm.RelationshipMultiplicity.ZeroOrOne, typeof(Model.Products), "OrderDetail"global::System.Data.Metadata.Edm.RelationshipMultiplicity.Many, typeof(Model.OrderDetail))]

没有细看这个特性类,估计是对象实体的映射关系吧,查了一下MSDN,

第一个参数是此实体所参与的关联的命名空间名称。(不是很明白,命名空间不是Model吗?)

第二个参数是此实体所参与的关系的名称。(应该是数据库里对应的关系名吧)

第三个参数是关联一端的类型的角色名称。 (应该是主键表的表名)

第四个参数是RelationshipMultiplicity 的值,指示在关联一端的重数,例如一重或多重。(这个好理解,就是关系了,比如一对多,多对多)

第五个参数是关联一端的实体类型。(就是对应的实体名)

第六个参数关联另一端的类型的角色名称。(外键表表名)

第七个参数是RelationshipMultiplicity 的值,指示在关联另一端的重数,例如一重或多重。

第八个参数是关联另一端的实体类型。(对应的实体名)

据我的理解这就是实体的关系映射吧

我们继续看下面的代码了

public partial class b2cDBEntities : global::System.Data.Objects.ObjectContext

首先说一下System.Data.Objects和System.Data.Entity和System.Data.EntityClient这三个命名空间都是VS2008新加的,存在于System.Data.Entity.dll里(如果有错请指出来)

ObjectContext这个类提供以对象形式查询和使用实体数据的功能。

ObjectContext 类是以对象(这些对象是 Entity Data Model (EDM) 中定义的实体类型的实例)的形式与数据进行交互的主要类。ObjectContext 类的实例封装以下内容:

Entity Data Model 工具生成表示 EDM 概念性模型的对象层时,会从 ObjectContext 派生表示该模型的 EntityContainer 的类。有关更多信息,请参见对象服务概述(实体框架)

如果我们以后要用linq 2 Entities就必须要和这个类打交道。比如:

b2cDBEntities db = new b2cDBEntities();
            var query 
= from m in db.Members
                        select m;

这样就和我们在linq 2 sql里的是一样