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

原文地址:https://www.cnblogs.com/fuyouchen/p/9385463.html