首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET引入存储库模式导致“IdentityUserLogin”没有键定义错误

ASP.NET引入存储库模式导致“IdentityUserLogin”没有键定义错误
EN

Stack Overflow用户
提问于 2020-12-19 02:31:44
回答 1查看 23关注 0票数 0

我开始将存储库模式实现到我的ASP.NET应用程序中,但是在尝试在实现该模式的视图上运行操作时,我得到了'EntityType 'IdentityUserLogin‘没有定义键。定义此EntityType的键。当我还没有实现存储库时,应用程序就不会发生这种情况。

MeetRepository.cs

代码语言:javascript
复制
using MVCWebAssignment1.Models;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace MVCWebAssignment1.DAL
{
    public class MeetRepository : IMeetRepository
    {
        private readonly MeetContext _context;
        
        public MeetRepository(MeetContext meetContext)
        {
            _context = meetContext;
        }
        public IList<Meet> GetMeets()
        {
            return _context.Meets.ToList();
        }

        public Meet GetMeetById(int id)
        {
            return _context.Meets.Find(id);
        }

        public void InsertMeet(Meet meet)
        {
            _context.Meets.Add(meet);
        }

        public void DeleteMeet(int id)
        {
            Meet meet = _context.Meets.Find(id);
            _context.Meets.Remove(meet);
        }

        public void UpdateMeet(Meet meet)
        {
            _context.Entry(meet).State = EntityState.Modified;
        }
        
        public void Save()
        {
            _context.SaveChanges();
        }
        private bool disposed = false;
        protected virtual void Dispose(bool disposing)
        {
            if(!this.disposed)
            {
                if(disposing)
                {
                    _context.Dispose();
                }
            }
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
    }

IMeetRepository,cs

代码语言:javascript
复制
using MVCWebAssignment1.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MVCWebAssignment1.DAL
{
    public interface IMeetRepository : IDisposable
    {
        IList<Meet> GetMeets();
        Meet GetMeetById(int id);
        void InsertMeet(Meet meet);
        void DeleteMeet(int id);
        void UpdateMeet(Meet meet);
        void Save();
    }
}

MeetContext.cs

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using MVCWebAssignment1.Models;

namespace MVCWebAssignment1.DAL
{
    public class MeetContext : DbContext
    {
        public MeetContext(): base("name=DefaultConnection"){}
        public DbSet<Meet> Meets { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }
    }
}

MeetController.cs (标记问题的方法)

代码语言:javascript
复制
    public class MeetController : Controller
    {
        //private ApplicationDbContext db = new ApplicationDbContext();

        private IMeetRepository _meetRepository;

        public MeetController()
        {
            _meetRepository = new MeetRepository(new MeetContext());
        }

        // GET: Meet
        public ActionResult Index()
        {
            return View(_meetRepository.GetMeets());
        }
    }

总之,当我介绍的类不使用标识组件时,我无法确定为什么使用存储库模式会开始使用标识的默认文件产生问题。

非常感谢你的指导!

EN

回答 1

Stack Overflow用户

发布于 2020-12-19 03:02:00

经过进一步的试验,我已经解决了这个问题。我通过继承存储库上下文上的IdentityDbContect来解决这个问题。

MeetContext.cs

代码语言:javascript
复制
 public class MeetContext : IdentityDbContext<ApplicationUser>
    {
        public MeetContext(): base("DefaultConnection"){}
        public DbSet<Meet> Meets { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65366149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档