2017-06-22 20 views
0

私はエンティティフレームワークがどのクラスもインスタンス化しようとすると奇妙な動作を続けるという問題に直面しています。私はデフォルトのusermanagerの動作を使用して、データベースにデータを格納しようとしています。Entity Frameworkクラスのインスタンス化

私はそれがアプリケーションのユーザークラスで利用できる通知のリストにその通知を追加する前に、新しい通知をインスタンス起動したら、それはそれらの変更を持続し、エンティティフレームワークからのエラーを処理する多重問題があることを言って、どのように私はここに、クラスの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"; 
} 

私の通知クラス:

[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); 

私が手にエラーがライン上にある:> UserManager.Update(addedUser)。それはエンティティフレームワークの制約違反、関係(Qwirk.Models.Notification_AssociatedUser)の役割(Notification_AssociatedUser_Target)の多重度が1または0..1であると言います。 ありがとうございます!

+0

'Notification'と' AssociatedUser'テーブルでどのような関係を構築したいですか?まず、テーブル構造から 'ModelBuilder.Entity ()'に 'HasForeignKey'を追加してみてください。 –

+0

通知には通知を受け取るユーザーが1人だけ必要あり、applicationUserには多くの通知が割り当てられます。 modelBuilderのHasForeignKeyについては、すでに通知を別のフィールドに指定してFluent APIとリンクするだけで、モデルに追加しようとしましたが、問題はまったく解決されません。 –

+1

'ApplicationUser'と' Notifications'の間に1..n関係を適用しますか? 'public virtual ApplicationUser AssociatedUser {get;}を設定してみてください。セット; } '通知と'パブリック仮想ICollection <通知>通知{get;セット; } 'をApplicationUserに追加します。次に、このモデルバインディングを適用します。モデルバインディング:ModelBuilder.Entity ()。HasRequired(c => c.AssociatedUser).WithMany(c => c.Notifications).HasForeignKey(c => c。[ForeignKeyFieldName])。WillCascadeOnDelete (偽); ' –

答えて

0

ソリューション時間は、2日には、エラーを検索した後、私は最終的にそれを見つけた: 私のコントローラでは、私がしなければならなかった:私はこの時点LMAOで正直に愚かな感じ代わりにaddingUserのyaayyyyyyの

AddedUser.Notifications.Add(new Notification(AddedUser, 
    "Friend Invitation", 
    "The user " + AddingUser.FirstName + " " + AddingUser.LastName + 
    "Sent you a friend invitation", friendship)); 

AddedUser。

関連する問題