我正在尝试创建一个使用内置MVC用户配置文件作为身份验证方法的基本网站。我正在使用MVC4.0和实体框架。
我有一个主数据类,它使用UserProfile模型作为外键。这个类是一个“游戏”类,目的是将游戏与某个用户联系起来。
我还在UserProfile类中添加了另一个成员,作为此项目的必要条件。
每次我尝试添加一个新游戏时,其中有一个用户的个人资料作为外键,服务器最终会完全创建一个新的用户个人资料,即使我专门制作它以便它是同一个用户。 / p>
作为尝试解决此问题的一部分,我将Game对象添加到用户配置文件DbContext,但这根本没有帮助,而且每次我将新游戏添加到数据库中。
我的模型如下:
public class Game
{
public int ID { get; set; }
[ForeignKey("UserId")]
public virtual UserProfile Profile { get; set; }
public int UserId { get; set; }
}
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public int Balance { get; set; }
}
我的新UsersContext是:
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<Game> GamesList { get; set; }
}
我添加新游戏的方法是:
Models.UsersContext uc = new UsersContext();
UserProfile prof = uc.UserProfiles.Where(c=>c.UserName == HttpContext.User.Identity.Name).First();
Game g = new Game();
g.Profile = prof;
g.Wager = int.Parse(BetQuantity);
uc.GamesList.Add(g);
uc.SaveChanges();
我真的不知道我做错了什么,任何帮助都会非常感激!
答案 0 :(得分:1)
像这样更改您的UserProfile
课程:
[Table("UserProfile")]
public class UserProfile
{
public UserProfile()
{
this.Games = new HashSet<Game>();
}
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public int Balance { get; set; }
public virtual ICollection<Game> Games { get; set; }
}
然后插入你的游戏:
Models.UsersContext uc = new UsersContext();
Game g = new Game();
g.UserId = WebSecurity.CurrentUserId;
g.Wager = int.Parse(BetQuantity);
uc.GamesList.Add(g);
uc.SaveChanges();
并注意您尚未在Wager
模型中为Game
声明任何属性。我不知道它是什么......