代码之家  ›  专栏  ›  技术社区  ›  SkyeBoniwell

如何使用实体框架处理两个不同模型/表的表单数据和提取属性

  •  0
  • SkyeBoniwell  · 技术社区  · 4 年前

    在玩家填写并点击提交后,它被发送到my.NetCore 3.1实体框架API。

    API需要将其保存到两个不同的模型中,以便可以将其插入到两个不同的数据库表中。

    那些是地牢和英雄。

    我有一个控制器,应该接受表单数据,它目前看起来像你看到的下面。

    我已经知道了如何使用一个模型来更新一个数据库表,但是如何对两个数据库表进行更新呢?

    [HttpPost]
    public async Task<ActionResult<CreateDungeon>> ProcessForm([FromBody]CreateDungeon data)
    {
        // Read quest data from form and add to DB via EF
        _context.Quest.Add(data.Quest);
        try
        {
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateException)
        {
            if (QuestExists(data.Quest.Id))
            {
                return Conflict();
            }
            else
            {
                throw;
            }
        }
    
        // Read heroes data from form and add to DB via EF
        _context.Heroes.Add(data.Heroes);
        try
        {
            await _context.SaveChangesAsync();
        }
        catch (DbUpdateException)
        {
            if (HeroesExists(data.Heroes.Id))
            {
                return Conflict();
            }
            else
            {
                throw;
            }
        }
    
        return Ok();
    }
    

    这是正确的做法吗?

    0 回复  |  直到 4 年前
        1
  •  1
  •   LouraQ    4 年前

    要在ef core中存储两个不同的数据库,需要创建两个不同的dbcontext。

    首先,在appsettings.json文件中

    "ConnectionStrings": {
        "DefaultConnection": "Connection string of the database where the quest table is located",
        "NewConnection": "Connection string of the database where the Heroes table is located"  }
    

    public class FirstdbContext : DbContext
    {
        public FirstdbContext (DbContextOptions<FirstdbContext > options) : base(options)
        {
        }
        public DbSet<Quest> Quest { get; set; }
    
    }
    
    
    
    public class SeconddbContext : DbContext
    {
        public SeconddbContext (DbContextOptions<SeconddbContext > options) : base(options)
        {
        }
        public DbSet<Heroes> Heroes { get; set; }
    
    }
    

    在startup.cs ConfigureServices方法中:

     public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.AddDbContext<FirstdbContext >(options =>
     options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
            services.AddDbContext<SeconddbContext >(options =>
     options.UseSqlServer(Configuration.GetConnectionString("NewConnection")));
        }
    

    [Route("api/[controller]")]
    [ApiController]
    public class HomeController : ControllerBase
    {
        private readonly MydbContext _context1;
        private readonly TestdbContext _context2;
    
        public HomeController (MydbContext context1, TestdbContext context2)
        {
            _context1 = context1;
            _context2 = context2;
        } 
        [HttpPost]
        public async Task<ActionResult<CreateDungeon>> ProcessForm([FromBody]CreateDungeon data)
        {
            // Read quest data from form and add to DB via EF
            _context1.Quest.Add(data.Quest);
            try
            {
                await _context1.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (QuestExists(data.Quest.Id))
                {
                    return Conflict();
                }
                else
                {
                    throw;
                }
            }
    
            // Read heroes data from form and add to DB via EF
            _context2.Heroes.Add(data.Heroes);
            try
            {
                await _context2.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (HeroesExists(Heroes.Id))
                {
                    return Conflict();
                }
                else
                { 
                    throw;
                }
            }
    
            return Ok();
        } 
    

    }

    推荐文章