我开始将存储库模式实现到我的ASP.NET应用程序中,但是在尝试在实现该模式的视图上运行操作时,我得到了'EntityType 'IdentityUserLogin‘没有定义键。定义此EntityType的键。当我还没有实现存储库时,应用程序就不会发生这种情况。
MeetRepository.cs
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
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
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 (标记问题的方法)
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());
}
}总之,当我介绍的类不使用标识组件时,我无法确定为什么使用存储库模式会开始使用标识的默认文件产生问题。
非常感谢你的指导!
发布于 2020-12-19 03:02:00
经过进一步的试验,我已经解决了这个问题。我通过继承存储库上下文上的IdentityDbContect来解决这个问题。
MeetContext.cs
public class MeetContext : IdentityDbContext<ApplicationUser>
{
public MeetContext(): base("DefaultConnection"){}
public DbSet<Meet> Meets { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
}https://stackoverflow.com/questions/65366149
复制相似问题