我面临一个问题,当我试图实例化任何类时,我的实体框架保持行为怪异。我正尝试使用默认的用户管理器行为将数据存储在我的数据库中。在将通知添加到应用程序用户类中可用的通知列表之前,我开始实例化新通知后,它会保留这些更改并处理来自实体框架的错误,指出存在多重性问题,如何告知实体框架不坚持变化一次,我在这里实例化一个类CF是我的控制器代码:实体框架类实例化行为
public string AddFriend(string AddedUserId)
{
var AddedUser = UserManager.FindById(AddedUserId);
var AddingUser = UserManager.FindById(User.Identity.GetUserId());
var friendship = new Friend(AddingUser, AddedUser) { IsInvitation = true };
AddingUser.Friends.Add(friendship);
AddedUser.Notifications.Add(new Notification(AddingUser, "Friend Invitation",
"The user " + AddingUser.FirstName + " " + AddingUser.LastName +
" Sent you a friend invitation", friendship));
UserManager.Update(AddedUser);
UserManager.Update(AddingUser);
return "Friend was added successfully";
}
我Notification类:
[Table("Notifications")]
public class Notification
{
[Key]
public int NotificationId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
[Required]
public ApplicationUser AssociatedUser { get; set; }
public Friend AssociatedFrienship { get; set; }
public GroupMember AssociatedGroup { get; set; }
public ChannelMember AssociatedChannel { get; set; }
public Message AssociatedMessage { get; set; }
public bool Consulted { get; set; }
public Notification()
{
}
public Notification(ApplicationUser associatedUser, string title, string content, Friend associatedFriend = null, GroupMember associatedGroup = null, ChannelMember associatedChannel = null, Message associatedMessage = null)
{
AssociatedUser = associatedUser;
Title = title;
Content = content;
AssociatedChannel = associatedChannel;
AssociatedGroup = associatedGroup;
AssociatedFrienship = associatedFriend;
AssociatedMessage = associatedMessage;
Consulted = false;
}
}
我ApplicationUser类:
public partial class ApplicationUser : IdentityUser
{
public virtual List<Notification> Notifications { get; set; }
}
我FluentAPI代码:
modelBuilder.Entity<Notification>()
.HasRequired(c => c.AssociatedUser)
.WithMany(c => c.Notifications);
提前感谢!
其他的事情,请尝试使用'串interpolation'而不是'+'是这样的:'$“的用户{AddingUser.FirstName} { AddingUser.LastName}发送给你一个朋友邀请“'也可以使用'Object Initialization'这样的'new Notification {AssociatedUser =,Title = }'来代替将每个属性传递给'ctor',并设置所需的属性。 –
TheVillageIdiot
发布此UserManager.FindById()正在执行的操作以及dbContext正在初始化的位置的代码。 –
userManager.FindById()是微软提供的身份框架的默认方法,该类的代码可在线使用。我真的不认为问题来自微软的代码,其他人认为提供一个混乱的框架代码会很糟糕。 –