zoukankan      html  css  js  c++  java
  • 一起学习MVC(3)搭建项目

    我们现在来搭建项目,项目使用经典的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里的是一样

  • 相关阅读:
    jqGrid表格控件的学习
    list 集合筛选数据
    MySQL跨域
    11-Index页面
    11-Comment页面
    11-Add页面
    11-UploadFile
    11-控制器UI
    11-控制器
    11-数据访问层
  • 原文地址:https://www.cnblogs.com/sobaby/p/1378195.html
Copyright © 2011-2022 走看看