zoukankan      html  css  js  c++  java
  • Entity Framework学习一:在.net类基础上创建新数据库

    此文章为读Code-First develoment with entity framework简单笔记。

    1.首先我们创建一个Person类

    public class Person
        {
            public int PersonId { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }

    接着创建Context类,该类继承于DbContext类

    public class Context:DbContext
        {
            public Context() : base("ConnectionString")
            {
    
            }
    
            public DbSet<Person> People { get; set; }
        }

    注意base(“ConnectionString”)需要配置链接字符串,否则EF会使用默认连接设置。

    <connectionStrings>
    <add name="ConnectionString"
    connectionString="data source=192.168.0.14;initial catalog=EfSample;user id=sa;password="
    providerName="System.Data.SqlClient"/>
    </connectionStrings>

    使用下面代码,如果数据库不存在,那么会在数据创建数据

    static void Main(string[] args)
            {
                using(var context=new Context())
                {
                   bool temp= context.Database.CreateIfNotExists();
                    if (temp)
                    {
                        Console.WriteLine("创建成功!");
                    }
                    else
                    {
                        Console.WriteLine("创建失败!");
                    }
                }
    
                Console.ReadKey();
            }

    运行本段代码后你会发现在数据库中创建了名为”EfSample”的数据库,这个数据库名称就是刚刚在配置文件中设置连接字符串的数据库名。

    2.增加一条记录到我们创建的数据库

    class Program
        {
            static void Main(string[] args)
            {
                using(var context=new Context())
                {
                   bool temp= context.Database.CreateIfNotExists();
    
                    var person = new Person
                    {
                        FirstName = "John",
                        LastName = "Doe"
                    };
                    context.People.Add(person);
                    context.SaveChanges();
    
                }
    
    
                Console.ReadKey();
            }
        }

    使用这段代码会发现在数据库中创建了People表,并增加了一条记录,EF为自动判断数据库中是否有People表(表名根据Context类中定义的public DbSet<Person> People { get; set; }属性名称)。我们也可以映射自己已经创建好的表,在后面会讲到。在这段代码中你为发现我们并没有给PersonId赋值,EF会自动把+Id名称的自动设置为表主键。

    3.查询数据库

    using(var context=new Context())
                {
                    var peopleList = context.People;
                    foreach(Person person in peopleList)
                    {
                        Console.WriteLine("Last name:{0},first name:{1},id {2}",person.LastName, person.FirstName, person.PersonId);
                    }
                }

    这样会查找所有People表中的数据,EF会自动生成“select * from People“语句去执行。使用LINQ和Lambda表达式可以执行更多复杂的查询,在后面会讲到。

    4.更新数据

    using(var context=new Context())
                {
                    var savedPeople = context.People;
                    if (savedPeople.Any())//判断是否有数据
                    {
                        var person = savedPeople.First();
                        person.FirstName = "Johnny";
                        person.LastName = "Benson";
                        context.SaveChanges();
                    }
                }

    5.删除一条数据

    using(var context=new Context())
                {
                    var persionId = 2;
                    var person = context.People.Find(persionId);
                    if (person != null)
                    {
                        context.People.Remove(person);
                        context.SaveChanges();
                    }
                }

    首先我们根据主键(注意这个方法查找必须是主键object[] keyValues,就是所有主键列,否则出错。)查找出对象,然后利用Remove删除,最后保存。

    6.数据Model改变了怎么办

    当在代码中添加了

    public class Company
        {
            public int CompanyId { get; set; }
            public string Name { get; set; }
        }
    public class Context:DbContext
        {
            public Context() : base("ConnectionString")//为配置文件中连接字符串名称
            {
            }
    
            public DbSet<Person> People { get; set; }
            public DbSet<Company> Companies { get; set; }
        }

    那么我们就改变了Context的Schema,在运行代码会报出异常信息。后面会讲到数据迁移。这里我们使用初始化器来简单的解决。

    • CreateDatabaseIfNotExists<TContext>
    • DropCreateDatabaseIfModelChanges<TContext>
    • DropCreateDatabaseAlways<TContext>

    public class Initializer: DropCreateDatabaseIfModelChanges<Context>
        {
        }
    static void Main(string[] args)
    {
    Database.SetInitializer(new Initializer());
    // more code follows
    public class Initializer: DropCreateDatabaseIfModelChanges<Context>
        {
            protected override void Seed(Context context)
            {
                context.Companies.Add(new Company
                {
                    Name = "My company"
                });
            }
        }

    注意这样初始化如果Model改变了,就会删除数据库并重新创建,那么我们数据库里的数据就会被删除,后面会讲到解决方法。

  • 相关阅读:
    Centos7安装gitlab私服
    SpringBoot2.x开发WebSocket
    java中 DecimalFormat格式的定义
    Docker部署Reids实战单机、集群
    CCF地铁修建
    C题:A Water Problem(dp||搜索)
    A题:Common Substrings(KMP应用)
    HDU 1879 继续畅通工程(Prim||Kruscal模板题)
    魔兽世界之一:备战(模拟)
    F题:等差区间(RMQ||线段树)
  • 原文地址:https://www.cnblogs.com/zjmsky/p/4822191.html
Copyright © 2011-2022 走看看