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

  • 相关阅读:
    HTML DOM 12 表格排序
    HTML DOM 10 常用场景
    HTML DOM 10 插入节点
    HTML DOM 09 替换节点
    HTML DOM 08 删除节点
    HTML DOM 07 创建节点
    022 注释
    024 数字类型
    005 基于面向对象设计一个简单的游戏
    021 花式赋值
  • 原文地址:https://www.cnblogs.com/weiweictgu/p/5879288.html
Copyright © 2011-2022 走看看