实体框架的关系我工作用ASP和实体框架和身份的网站上。与身份
我实际上面临一个问题,即实体框架不向数据库表中添加条目,即使我正在向模型中添加类。
我面临的只是实际问题打我宣布为以下身份模型至极的具体subclasse:
public partial class ApplicationUser : IdentityUser
{
public virtual List<Friend> Friends { get; set; }
}
朋友那里被声明为以下几点:
[Table("Friends")]
public class Friend
{
[Key, Column(Order = 1)]
public string AddingUser { get; set; }
[Key, Column(Order = 2)]
public string AddedUser { get; set; }
public string Pseudo { get; set; }
public DateTime FriendsSince { get; set; }
public bool IsInvitation { get; set; }
public bool IsAccepted { get; set; }
public bool IsBloqued { get; set; }
public int NumberOfUnreadenMessages { get; set; }
public virtual List<Message> FriendShipMessages { get; set; }
[ForeignKey("AddingUser")]
public virtual ApplicationUser AddingFriend { get; set; }
[ForeignKey("AddedUser")]
public virtual ApplicationUser AddedFriend { get; set; }
public Friend()
{
FriendShipMessages = new List<Message>();
}
public Friend(ApplicationUser AddingUser, ApplicationUser AddedUser)
{
AddedFriend = AddedUser;
AddingFriend = AddingUser;
this.AddingUser = AddingUser.Id;
IsInvitation = false;
IsAccepted = false;
IsBloqued = false;
FriendsSince = DateTime.Now;
NumberOfUnreadenMessages = 0;
FriendShipMessages = new List<Message>();
}
}
我做添加到EF模型构建器此规则以将应用程序用户映射到朋友表:
// Mapping Friends And Bloqueds
modelBuilder.Entity<ApplicationUser>()
.HasMany(c => c.Friends)
.WithRequired(c => c.AddingFriend)
.WillCascadeOnDelete(false);
在我的控制器部分增加一个用户,我使用下面的代码:
public string AddFriend(string AddedUserId)
{
var AddedUser = UserManager.FindById(AddedUserId);
var AddingUser = UserManager.FindById(User.Identity.GetUserId());
AddingUser.Friends.Add(new Friend(AddingUser, AddedUser) {
IsInvitation = true });
return "Friend was added successfully";
}
哪里是为什么我的控制器不能有效地将知道在调试运行会话我确实有良好的实体进入到数据库的问题进入控制器,它也可以有效地创建好友类的实例。 预先感谢您的回复。
首先,您并未在任何地方保存更改。你应该真的用'DbContext'做这种事情,而不是'UserManager'返回的用户对象。 – DavidG
我传递到的UserManager当我创建一个全局DB背景下,是不是已经走在帐户中的更改,并将它们直接存储到数据库? 在ConfigureAuth从Owin我有: app.CreatePerOwinContext(ApplicationUserManager.Create); –
我真的不知道了'UserManager'是如何工作的,当您更改集合属性,我希望还是明确有这样的事情这就是为什么我会直接使用的上下文。它可能工作,如果你实际上更新用户(即'UserManager.UpdateUser(AddingUser)'),否则你不坚持你的更改。 – DavidG