我已经为User:Identity类
创建了自定义字段public class User : IdentityUser
{
public virtual ICollection<Item> Items { get; set; }
}
其中Item是自定义类
public class Item
{
public Guid Id { get; set; }
public string OwnerId { get; set; }
public string Name { get; set; }
[ForeignKey("OwnerId")]
public virtual User User { get; set; }
}
然后我在控制器方法中使用它
[HttpPost]
public ActionResult AddToFavourite(bool check)
{
var user = UserManager.FindByIdAsync(User.Identity.GetUserId()).Result;
var item = new Item();
if (check)
user.Items.Add(item);
else
user.Items.Remove(item);
_context.CommitChanges();
return View();
}
有人可以解释如何在数据库中保存这些更改吗? 我试图根据this实施解决方案,但不幸的是它仍然不适用于我。用户实体已更新,但数据库中未保存任何更改。
更新
public class ApplicationDbContext : IdentityDbContext<User>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{ }
public DbSet<Item> Items { get; set; }
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>().HasMany(p => p.Items).WithMany().Map(mp => mp.ToTable("Favourite"));
}
}
public class Repository : IDisposable
{
private ApplicationDbContext _dbContext = new ApplicationDbContext();
public void CommitChanges() => _dbContext.SaveChanges();
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
_dbContext.Dispose();
}
}
this.disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
答案 0 :(得分:0)
您需要实例化数据库连接。我假设您要么先关闭数据库的第一个路由或代码,然后设置连接。如果你转到你的web.config,你会看到连接字符串。
您可以使用'using语句'来实例化数据库连接,这将在using语句编译完成后处理连接。
using(var db = new DatabaseEntities())
{
var user = UserManager.FindByIdAsync(User.Identity.GetUserId()).Result;
var item = new Item();
if (check)
user.Items.Add(item);
else
user.Items.Remove(item);
db.SaveChanges();
}
但是,这不会将任何内容保存到数据库中,因为您的代码不会对数据库应用任何更改 - 您正在使用内存数据,例如user.items。