zoukankan      html  css  js  c++  java
  • Entity Framework 学习笔记

    1、自定义数据库链接字符串上下文

     public class PetDbContext : DbContext
        {
            public PetDbContext()
                : base("name=DemoDB")
            {
            }
            public DbSet<Dog> Dogs { get; set; }
        }

    2、Code First 模型迁移相关命令

    Enable-Migrations 启用模型迁移,会自动建立Migrations文件夹,里面记录模型修改历史
    Add-Migration AddType ,模型添加字段Type后,执行该命令,会生成模型修改历史
    Update-Database  将模型的修改应用到数据库中

    3、EF 支持的完整注释列表为

    4、Entity Framework数据库初始化方式

      Entity Framework通过Database.SetInitializer来指定需要的数据库初始化方式,Database.SetInitializer可指定的数据库共有3种:
    
      1>. CreateDatabaseIfNotExists
    
      CreateDatabaseIfNotExists是Database.SetInitializer指定数据库的默认方式,用于当数据库不存在时,自动创建数据库。由于该方式是默认方式,所以可以不需要任何代码进行指定,当然也可以使用代码来明确的指定。
    
    Database.SetInitializer(new CreateDatabaseIfNotExists<PetDbContext>());
      2>. DropCreateDatabaseWhenModelChanges
    
      DropCreateDatabaseWhenModelChanges用于当数据模型发生改变时,先删除原数据库,后创建新的数据库。
    
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PetDbContext>());
      3>. DropCreateDatabaseAlways
    
      DropCreateDatabaseAlways用于每次均先删除原数据库再创建新的数据库,不管数据模型是否发生改变。
    
    Database.SetInitializer(new DropCreateDatabaseAlways<PetDbContext>());
      但是,在很多时候,我们希望即使在Entity Framework Code First与数据库不匹配时,宁可Entity Framework Code First报出数据库连接错误,而不希望对数据库进行任何的删除创建操作。Entity Framework Code First提供关闭数据库初始化操作:
    
    Database.SetInitializer<PetDbContext>(null);

    代码示例:

    public class PetDbContext : DbContext
        {
            static PetDbContext()
            {
                Database.SetInitializer<PetDbContext>(null);
                //Database.SetInitializer(new CreateDatabaseIfNotExists<PetDbContext>());
                //Database.SetInitializer(new DropCreateDatabaseAlways<PetDbContext>());
                //Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PetDbContext>());
            }
            public PetDbContext()
                : base("name=DemoDB")
            {
            }
            public DbSet<Dog> Dogs { get; set; }
        }

     5、使用ER进行CRUD操作

    实体定义

     public class Dog
        {
            public int? Age { get; set; }
            public Guid Id { get; set; }
            public string Name { get; set; }
            public float? Weight { get; set; }
            public int Type { get; set; }
            public DateTime BirthDay { get; set; }
            public string Address { get; set; }
        } 

    新增:

    using (PetDbContext db = new PetDbContext())
                {
    var dog = new Dog { Id = Guid.NewGuid(), Name = "杨贵妃", Age = 4,Type=6,BirthDay=DateTime.Now };
    db.Dogs.Add(dog);
    int cnt = db.SaveChanges();
    }

    根据ID读取与更新:

    using (PetDbContext db = new PetDbContext())
                {
    var dog = db.Dogs.FirstOrDefault<Dog>(t =>( t.Id == new Guid("3455dcc0-4487-4258-bd76-b158c1c4a551"))); 
    if(dog!=null)
    {
    dog.BirthDay
    = DateTime.Now;
    int cnt = db.SaveChanges();
    }
    }

     删除记录:

     using (PetDbContext db = new PetDbContext())
                {
              
                    var dog = db.Dogs.FirstOrDefault<Dog>(t =>( t.Id == new Guid("3455dcc0-4487-4258-bd76-b158c1c4a551")));
    
                  if(dog!=null)
    { db.Dogs.Remove(dog);
    int cnt = db.SaveChanges();
    } }

     6、多表连接查询示例:

     var list2 = from a in dbContext.Student
                                join b in dbContext.Course
                                on a.Id equals b.StudentId
                                where a.Id == 1
                                select new { a.Name, a.Sex, a.Aage, b.CourseName };
                    gridView.DataSource = list2.ToList();
                    gridView.DataBind();

    7、使用EF进行批量更新的框架:

    https://github.com/loresoft/EntityFramework.Extended

    8、Linq中使用like

    Linq 还提供了一种方法,叫做SqlMethods.Like,需要先添加System.Data.Linq.SqlClient名称空间。上面的三个可以写成
    var q = (from c in db.Customers
                     where SqlMethods.Like(c.CustomerID, "%ROUT%")

     9、存储过程 删除,有几个参数,存储后面要带几个参数以逗号分隔
     

    SqlParameter[] para = new SqlParameter[] { 
    new SqlParameter("@ID",id)
    };
    db.Database.ExecuteSqlCommand("sp_Userinfos_deleteByID @ID", para);

     10、出现Unable to load the specified metadata resource.

    connectionString="metadata=res://*/Model.Project.csdl|res://*/Model.Project.ssdl|res://*/Model.Project.msl;

    改为

    connectionString="metadata=res://*/;

    https://msdn.microsoft.com/en-us/data/jj200620
    https://msdn.microsoft.com/zh-cn/data/ee712907

  • 相关阅读:
    [BZOJ3513] idiots
    2020牛客暑期多校训练营(第六场)A
    2020牛客暑期多校训练营(第六场)J
    2020牛客暑期多校训练营(第六场)H
    2020牛客暑期多校训练营(第六场)G
    2020牛客暑期多校训练营(第六场)K
    组队训练日志 2020.10.05
    Java基础
    Auditd
    Snort记录
  • 原文地址:https://www.cnblogs.com/weiweictgu/p/5879288.html
Copyright © 2011-2022 走看看