實體框架的關係我工作用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