zoukankan      html  css  js  c++  java
  • Entity Framework(二)

    1、 ORM :Object Relation Mapping ,通俗说:用操作对象的方式来操作数据库。

    2、 插入数据不再是执行Insert,而是类似于 Person p=new Person() ; p.Age=3;p.Name="wang" ;db.save(p);这样的做法;

    3、ORM工具有很多Dapper、PetPoco、NHibermate,首推Entity Framework

    4、EF底层还是多ADO.Net的封装.

    5、使用EF进行数据库开发的时候有两个东西建立:建数据库,建模型类。根据这两种创建的先后顺序有EF的三种创建方法:

       (1) Database First(数据库优先):先创建数据库表,然后自动生成EDM文件,EDM文件生成模型类  

        (2)Model First (模型优先):先创建Edm文件,Edm文件自动生成模型类和数据库;

        (3)Code First(代码优先):自己写模型类,然后生成数据库,没有EDM。

    6、EF安装

         (1)基础阶段用控制台项目,使用Nuget安装EntityFramework 会自动再APP'config  中增加两个EntityFramework相关的配置;

          (2)在web.cong中配置链接字符串:

      <connectionStrings>
        <add name="connstr" connectionString=" Data Source=.; Initial Catalog=Test2; User Id=sa; Password=123;  "  providerName="System.Data.SqlClient"  />
      </connectionStrings>

         

    7、 EF简单DataAnnotations实体配置

      (1)数据库创建表:T_Persons,有Id(主键,自动增长) ,Name,CreateDateTime;

      (2)创建Person类

        [Table("T_Persons")] //因为和表名不一样,所以要使用Table标注;
       public class Person
        {
            public long Id { get; set; }
            public string  Name { get; set; }
    
            public DateTime CreateDateTime { get; set; }
            
    
        }

               因为EF约定的主键是Id,所以不用再特殊指定Id为主键,如果非要指定就用[Key] .因为字段名和属性名一样,所以不用再特殊指定关系,如果需要[Column("Name")].

               必填字段标注[Required]、字段长度[MaxLength(5)] 、可空字段 int?  、如果字段再数据库中有默认值,则要再属性上标注[DatabaeGenerated]  注意实体类要写成public ,否则后面会有麻烦;

           (3)创建 DbContext 类(模型类、实体类)

       public class TestDbContext:DbContext
        {
            public TestDbContext():base("name=connstr")//name=connstr 表示使用连接字符串中名字为connstr的数据库
            {
    
            }
            public DbSet<Person> Persons { get; set; }
        }

             (4)测试:

            static void Main(string[] args)
            {
                using (TestDbContext ctx = new TestDbContext())
                {
                    Person p1 = new Person()
                    {   
                        CreateDateTime = DateTime.Now,
                        Name = "wang"
                    };
                    ctx.Persons.Add(p1);
                    ctx.SaveChanges();
                }
            }

        注意: MyDbConnect 对象是否需要using有争议,不using也没事,每次用的时候new MyDbConnect就行,不用共享同一实例,共享反而会有问题。saveChanges()才会更新到数据库中。EF开发团队都说要using,很多人不用,只是想利用LazyLoad而已,但是那样做是违反分层的原则的。习惯用using 

    8、 EF模型的两种配置方式:

         EF中的模型类有两种配置方式:DataAnnotations、FluentAPI两种。上面这种在模型类上[Table"T_Person")]、[Column("Name")]这种方式就叫 DataAnnotations。这种方式方便,但是耦合度太高,一般的类最好是POCO(就是一个普通的类),不符合大项目开发的要求。微软推荐使用FluentAPI,因此主要用FluentAPI

  • 相关阅读:
    Windows API的CreateFile()中的OPEN_ALWAYS和CREATE_ALWAYS之间的差异
    Linux下的虚拟串口对(可用于在本机上模拟串口进行调试)
    [转&精]IO_STACK_LOCATION与IRP的一点笔记
    【转】在WIN7、WIN10操作系统用WebDAV映射网络驱动器需要的操作
    Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information
    分布式处理大数据的目录及学习树
    利用docker将传统企业集中式架构转换为微服务架构的实践经验
    docker学习笔记5 端口映射与容器互联
    docker学习笔记4 数据管理、持久化
    docker学习笔记3 容器 container
  • 原文地址:https://www.cnblogs.com/fuyouchen/p/9385463.html
Copyright © 2011-2022 走看看