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 支持的完整注释列表为

  • KeyAttribute
  • StringLengthAttribute
  • MaxLengthAttribute
  • ConcurrencyCheckAttribute
  • RequiredAttribute
  • TimestampAttribute
  • ComplexTypeAttribute
  • ColumnAttribute
  • TableAttribute
  • InversePropertyAttribute
  • ForeignKeyAttribute
  • DatabaseGeneratedAttribute
  • NotMappedAttribute

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();
} }

 

参考:

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

 

你可能感兴趣的:(Entity Framework 学习笔记)