(Entity Framework Core入门)四、EFCore的模拟离线修改

1.生命周期说明(注入,可以参考前面(初识MVC CORE)一、初识管道和生命周期

 

1)Scop:每次Http请求都去生成一个MyContext实例

2)Transient:每次需要的时候,都会创建一个MyContext实例

3)Singleton:一旦被创建,就会一直使用这个实例,直到应用停止

 

2.修改(修改Startup.cs 里头的 ConfigureServices方法)

public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options => 
            {
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });


            services.AddMvc().SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_1);

            services.AddDbContext<MyContext>(
                options=>
                {
                    //显示敏感字(插入的数据--例如:中文内容)
                    options.EnableSensitiveDataLogging(true);

                    //获取数据连接串
                    //options.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=AspEFCoreDemo;Trusted_Connection=True;");
                    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
                },ServiceLifetime.Transient);

        }

 

3.修改HomeController.cs

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AspEFCore.Data;
using AspEFCore.Domain.Model;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

namespace AspEFCore.Web.Controllers
{
    public class HomeController : Controller
    {
        private readonly MyContext _context;
        private readonly MyContext _context2;
        public HomeController(MyContext context, MyContext context2)
        {
            _context = context;
            _context2 = context2;
        }

        public IActionResult Index()
        {

            var pro2 = _context.Provinces.FirstOrDefault();
            if (pro2 != null)
            {
                _context2.Provinces.Update(pro2);
                _context2.SaveChanges();
            }

            var pro = new Province
            {
                Name = "四川",
                Population = 5000,
                Cities = new List<City>
                {
                    new City{AreaCode="0001",Name = "重庆" },
                    new City{AreaCode="0002",Name = "重庆2" }
                }
            };

            _context.Provinces.Add(pro);
            _context.SaveChanges();

            //预加载查询
            var provincee = _context.Provinces
                .Include(x => x.Cities)
                .First(x=>x.Cities.Any());

            var city = provincee.Cities[0];
            city.Name += " Updated";

            //离线修改
            _context2.Entry(city).State = EntityState.Modified;

            return View();
        }


    }
}

 

4.添加断点运行,确认是否同一个对象

 

注:离线修改将除主键以外的所有属性值进行Update一遍

 

 感谢:Dave

 参阅:https://v.qq.com/x/page/i0767euw2l1.html

https://v.qq.com/x/page/g0768g6ca62.html

 

posted @ 2019-05-04 13:29  蜗牛的礼物  阅读(499)  评论(0编辑  收藏  举报