C#EntityFramework(EF基础)

C#EntityFramework(EF基础)

0.App.config 设置链接串

<connectionStrings>
    <add name="con" connectionString="server=.;database=zhazhabade;uid=sa;pwd=sa" providerName="System.Data.SqlClient"/>
  </connectionStrings>

1.设置上下文

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using EntityFramework;

namespace EntityFramework_Zha
{
    class BookDemo3Context:DbContext    //上下文
    {
        public BookDemo3Context() : base("con")   //nameOrConnectionString
        {
            Database.SetInitializer<BookDemo3Context>(null);
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
            modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
        }

        public DbSet<BookType> BookTypes { get; set; }
        public DbSet<Book> Bools { get; set; }

    }
}

2.设置models

class BookType
    {
        public long Id { get; set; }

        [StringLength(20),Required]   //不允许为空
        public  string Name { get; set; }

        public DateTime? CreateTime { get; set; }
    }
class Book
    {
        public long Id { get; set; }
        public string Title { get; set; }
        public string Descr { get; set; }
        public DateTime CreateTime { get; set; }=DateTime.Now;
        [ForeignKey(nameof(BookType))]   //外键
        public long BookTypeId { get; set; }
        public BookType BookType { get; set; }

    }

3.接下来 配置migrations

(1)打开程序包管理控制台

enable-migrations   //激活后 会出现一个Migrations的文件夹  和configurations的配配置文件

configurations.cs

namespace EntityFramework.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class Configuration : DbMigrationsConfiguration<EntityFramework_Zha.BookDemo3Context>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(EntityFramework_Zha.BookDemo3Context context)
        {
            //  This method will be called after migrating to the latest version.

            //  You can use the DbSet<T>.AddOrUpdate() helper extension method
            //  to avoid creating duplicate seed data.
            
            //这样可以在迁移的时候直接拆入
            //context.BookTypes.AddOrUpdate(new BookType{Name="散文"} );
            //context.BookTypes.AddOrUpdate(new BookType{Name="科幻"} );
            //context.BookTypes.AddOrUpdate(new BookType{Name="诗歌"} );
            //context.BookTypes.AddOrUpdate(new BookType{Name="儿童"} );
        }
    }
}

(2)打开程序包管理控制台

add-migrations createdb //后面那个是名字

(3)打开程序包管理控制台

update-database   //更新数据库

4.常用的操作

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using EntityFramework;

namespace EntityFramework_Zha 
{ 
    class Program
    {
        static void Main(string[] args)
        {
            using (BookDemo3Context db = new BookDemo3Context())
            {
                db.Database.Log=(o) =>
                {
                    Console.WriteLine(o.ToString());
                };
                //状态:数据取出:Unchanged(持久态)  Remove :deleted  保存:detached (游离态)  跟新:Modified

                var type = new BookType() { Id = 3 };
                db.Entry(type).State = System.Data.Entity.EntityState.Unchanged;  //假设从数据库取出
                type.Name = "djdkj";
                db.Entry(type).State = System.Data.Entity.EntityState.Deleted;  //假设从数据库删除
                db.SaveChanges();


                //更新
                var type2 = new BookType()
                {
                    Id = 2,
                    Name = "zhazha"
                };


                db.Entry(type2).State = EntityState.Modified;  //假设更新
                db.SaveChanges();

                foreach (var item in db.BookTypes)
                {
                    Console.WriteLine(item.Name);
                }

                
                //查找的两种state
                var item1 = db.BookTypes.AsNoTracking().FirstOrDefault(m => m.Name == "科幻");  //detached
                
                var item2 = db.BookTypes.FirstOrDefault(m => m.Name == "科幻");    //unchange
                Console.WriteLine($"state1:{db.Entry(item1).State},state1:{db.Entry(item2).State}" );


            }

            Console.ReadLine();
        }
    }
}

发布了27 篇原创文章 · 获赞 1 · 访问量 1673

猜你喜欢

转载自blog.csdn.net/qq_37959151/article/details/105314016