• mvc+EF


    ---------------------------------------------------------------------数据库先行-------------------------------------------------------------------------------------

    这种方式是比较传统的以数据库为核心的开发模式。比较适合有数据库DBA的团队、或者数据库已存在的情况。

    优缺点:

    1、优点:编辑代码最少的方式,在有完整的数据库的前提下,你几乎可以不编辑任何代码就能完成应用程序的数据层部分(EF)。

    2、不够灵活,域模型结构完全由数据库控制生成,结构不一定合理;受数据库表和字段名影响,命名不规范。

    创建步骤:1.在程序中新建DAL文件夹(或者单独创建DAL工程),

    2.DAL文件夹点右键,选择添加->新建项。打开新建项界面,在界面中选择数据->ADO.NET实体数据模型。数据模型更名为TestEF.edmx,打开实体模型创建向导。

    3.选择从数据库生成

    4.选择数据库连接(没有可以新建一个),点下一步

    5.可以选择所有的表、视图和存储过程和函数。

      可选的确定生成对象名称的单复数形式,选中后如果数据库表是负数形式,比如Books,创建的对应对象名就是Book,如果不选,则对应对象名是Books。

    6.点击完成,生成EF的数据模型

    7.测试代码

     static void Main(string[] args)
      {
                Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Entities>());
                Contact con = new Contact
                {
                    Name = "hht"
                };
                Contact con2 = new Contact
                {
                    Name = "zhansan"
                };
                var list = new List<Contact>();
                list.Add(con);
                list.Add(con2);
                CGroup group = new CGroup
                {
                    Contacts = list,
                    GName = "Master Group"
                };
                using (Entities db = new Entities())
                {
                    db.CGroups.Add(group);
                    db.SaveChanges();
                    foreach (CGroup item in db.CGroups)
                    {
                        var cons = item.Contacts;
                        Console.WriteLine("Group:" + item.GName + "  have Contact " + cons.Count() + " 个");
                        db.CGroups.Remove(item);
                    }
                    db.SaveChanges();
                }
       }

    输出结果

    数据库

    OK,插入数据成功

    -----------------------------------------------------------------------代码先行---------------------------------------------------------------------------------------

    Entity Framework:实体框架,看名字就知道是针对模型数据的。这是MS推出的一款ORM工具。

    与NHibernate比较

    1)Entity Framework封装性更好,增、删、改、查询更方便

    2)  Entity Framework使用更方便的Linq to Entity查询,延迟加载(只有在需要时才加载,只加载需要的数据)。

    3)开发效率很高,使用DBFirst几乎不用编辑什么代码就能生成一个简单、通用的应用程序。

    水平有限,只是把最近关于Entity Framework学习的心得整理一下。供以后查询

    第一步:安装Entity Framework

    使用Nuget下载最新版的Entity Framework ;在项目上右键->管理Nuget程序包,打开Nuget程序包管理界面

    搜索 Entity,找到最新版本Entity Framework,点击安装。(我的已经安装好了)

    Code First-代码优先,先创建好领域模型。新建MyDbContext继承DbContext。根据代码自动生成数据库

    Code First优点

    1.可以自由的创建领域模型,基本不受EF框架的限制。自由的命名。程序员只需要关心对象间的关系。基本做到了与数据库的完全分离。

    2.便于单元测试。不再使用绑定性较强的edmx文件。只使用普通的Model类

    3.使用Fluent API映射可以自由的定义表名、字段名和关系。可控性强

    4.可以方便的进行数据库迁移

    用法

    一、创建领域模型:新建Contact、CGroup、Address三个Model类

    public class Contact
      {
            public int ID { get; set; }
            public string Name { get; set; }
            public System.DateTime CreateDate { get; set; }
            public virtual Address Address { get; set; }
            public int CGroupID { get; set; }
            public CGroup CGroup { get; set; }
            public virtual ICollection<Book> Books { get; set; }
        }


        public class CGroup
        {
            public int Id { get; set; }
            public string GName { get; set; }
            public ICollection<Contact> Contacts { get; set; }
        }
        public class Address
        {
            public int ID { get; set; }
            public string Contury { get; set; }
            public string City { get; set; }
            public string Street { get; set; }
            public string Code { get; set; }
            public Contact Contact { get; set; }
        }

    二、新建一个EFTestContext,继承自DbContext

     public class EFTestContext : DbContext
      {
            public EFTestContext() : base("name=CommunicationContext2") { }


            public DbSet<EFModels.CGroup> CGroups { get; set; }
            public DbSet<EFModels.Address> Addresses { get; set; }
            public DbSet<EFModels.Contact> Contacts { get; set; }
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
                modelBuilder.Entity<EasyUIEFWebApp.DAL.EFModels.Contact>().HasOptional(c => c.Address)
                    .WithOptionalDependent(add => add.Contact);
                modelBuilder.Entity<EasyUIEFWebApp.DAL.EFModels.CGroup>().HasMany(c => c.Contacts)
                    .WithRequired(c => c.CGroup).WillCascadeOnDelete(false);
                //modelBuilder.Entity<EasyUIEFWebApp.DAL.EFModels.Contact>().HasOptional(c => c.CGroup)
                //    .WithMany(c => c.Contacts).WillCascadeOnDelete(true);
            }
       }

    注意:base("name=CommunicationContext2") { },这句表示使用Config文件里名为CommunicationContext2的数据库连接,如果直接写base("CommunicationContext2") { }

    EF会自动创建一个名为CommunicationContext2的dbf文件。数据库名也是CommunicationContext2

    在WED.config里面配置链接数据库的字段,在数据库只需要建好一个库就行

    <connectionStrings>
    <add name="CommunicationContext2" connectionString="Data Source=.;Initial Catalog=EFText;User ID=sa;Password=qwer" providerName="System.Data.SqlClient" />
    </connectionStrings>

  • 相关阅读:
    Web service是什么?
    SQL截取字符串
    SQL Server中使用索引性能的比较
    一个C#中webservice的初级例子(一)
    short s1 = 1; s1 = s1 + 1;有错而short s1 = 1; s1 += 1正确。为何?
    SQL索引
    ORDER BY 子句在子查询和公用表表达式中无效的一种解决办法使用表变量
    创建 索引,
    时间的重叠
    SQLServer Datetime数据类型的转换
  • 原文地址:https://www.cnblogs.com/manwwx129/p/6970702.html
Copyright © 2020-2023  润新知