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改变了,就会删除数据库并重新创建,那么我们数据库里的数据就会被删除,后面会讲到解决方法。

原文地址:https://www.cnblogs.com/zjmsky/p/4822191.html