0
我正在创建一个简单的Web应用程序,允许登录的用户存储不与其他用户共享的数据。数据库应用程序。将数据添加到登录用户仅对登录的用户可见
我无法将数据关联到用户。
这个模型看起来是这样的:
namespace TvShowsDb.Models
{
public class TvShow
{
public int TvShowID { get; set; }
public string TvShowName { get; set; }
public string LastEpisodeSeen { get; set; }
public string Comment { get; set; }
public bool SeenAll { get; set; }
public DateTime DateAdded { get; set; }
public DateTime DateLastEdited { get; set; }
}
}
而且从ASP.NET MVC5生成的用户模型看起来是这个样子我补充:
namespace TvShowsDb.Models
{
public class ApplicationUser : IdentityUser
{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
public IList<TvShow> TvShows { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public System.Data.Entity.DbSet<TvShowsDb.Models.TvShow> TvShows { get; set; }
}
}
我想实现的是,当登录的用户转到创建电视节目网页并创建tvshow,然后该特定的电视节目和来自该模型的数据被添加到用户。我有一个在用户电视节目列表。
这里是当我添加一个tvshow代码:
// POST: TvShows/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "TvShowID,TvShowName,LastEpisodeSeen,Comment,SeenAll,DateAdded,DateLastEdited")] TvShow tvShow)
{
if (ModelState.IsValid)
{
var user = UserManager.FindById(User.Identity.GetUserId());
IList<TvShow> tvshows = user.TvShows;
user.TvShows.Add(tvShow);
// db.TvShows.Add(tvShow);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(tvShow);
}
我得到的用户,即工作并返回正确的用户。然后我得到电视节目列表,它返回null。然后,添加失败,因为tvshow列表为空。
我该如何着手将tvshows添加到用户,以便我可以将它们显示在该特定用户的索引页上?
这给了我一个错误在该行:“LINQ到实体无法识别方法“System.String GetUserId(System.Security。 Principal.IIdentity)'方法,并且此方法不能转换为商店表达式。“ – Sigmundur
在查询之前定义用户 - 'var ID = User.Identity.GetUserId(); var user = db.Users.Include(u => u.TvShows).Single(u => u.Id == ID);' –
斯蒂芬,是的,它的工作原理。我很想解释为什么这会起作用。此外,这是访问用户和他的数据的标准方式吗? 如果史蒂夫更新他的答案包括斯蒂芬斯改变,那么我会将其标记为正确的答案。如果斯蒂芬对他的评论作出回答,那么我会将其标记为接受的答案。 谢谢你们。 – Sigmundur