entity framework - EF4.1 Many-to-Many Relationship : DisplayInInbox for each user -


for reason cannot head around one... have private messaging system allows users send eachother pm's. user can delete message his/her inbox, when happens, shouldn't deleted other user's inbox. that, believe should have many many relationship between user , message entities. but, how should map relationship allow users delete messages inbox (which thought i'd create boolean for: displayininbox) , not delete other user's inbox well?

my current model not work follows:

public class message {     public int id { get; set; }     [maxlength(150)]     public string subject { get; set; }     [maxlength(3000)]     public string content { get; set; }     public datetime datesent { get; set; }     public datetime? lastviewed { get; set; }     public bool isread { get; set; }     public bool displayininbox { get; set; }      public int? parentid { get; set; } } 

and on user class have property:

    public virtual icollection<message> receivedmessages { get; set; } 

do need 2 booleans or 1 enough? , how should map relationship eventually?

update:

ok here's model:

public class inbox {     [key, column(order = 0), foreignkey("user")]     public int userid { get; set; }     [key, column(order = 1), foreignkey("message")]     public int messageid { get; set; }      public datetime? lastviewed { get; set; }     public bool isread { get; set; }      public virtual message message { get; set; }     public virtual user sender { get; set; }     public virtual user receiver { get; set; }  }  public class message  {     public int id { get; set; }     [maxlength(150)]     public string subject { get; set; }     [maxlength(3000)]     public string content { get; set; }     public datetime datesent { get; set; }     public int? parentid { get; set; }     public virtual icollection<inbox> receivedby { get; set; }     public virtual icollection<inbox> sentby { get; set; } } 

and on user class:

    public virtual icollection<inbox> receivedmessages { get; set; } 

you don't need boolean. meaning of boolean model many-to-many relationship. have message in database once , inbox presence defined many-to-many relation.

the problem want keep additional information related message , user. because of must expose junction table separate entity:

// message public class message {     public int id { get; set; }     [maxlength(150)]     public string subject { get; set; }     [maxlength(3000)]     public string content { get; set; }     public datetime datesent { get; set; }      [foreignkey("parentmessage")]            public int? parentid { get; set; }     [foreignkey("sender")]     public int senderid { get; set; }      ...      public virtual message parentmessage { get; set; }     public virtual icollection<inbox> receivedby { get; set; }     public virtual user sender { get; set; } }  public class inbox {     [key, column(order = 0), foreignkey("user")]     public int userid { get; set; }      [key, column(order = 1), foreignkey("message")]     public int messageid { get; set; }      public datetime? lastviewed { get; set; }     public bool isread { get; set; }       public virtual message message { get; set; }     public virtual user user { get; set; } }  public class user {     public int id { get; set; }     ...     public virtual icollection<inbox> receivedmessages { get; set; }     public virtual icollection<message> sendmessages { get; set; } } 

now removing message user's inbox means removing record receivedmessages not delete message - delete record in inbox table.

edit:

i updated code sample support additional requirements. now:

  • each message can have multiple receivers
  • receiving message done separate entity called inbox allow deleting message per user , using properties isread per user.
  • message has optional parentid , parentmessage can track reactions / responses other messages.
  • message has sender , senderid , in same time user have collection of sent messages. in opinion message sent single user relation has nothing inbox , must directly between message , user.

Comments