2014-02-09 43 views
0

我想在实体框架6中映射两个表,并且需要一些帮助!这是我的聊天应用程序;我需要将用户对话映射到数据库中。群组和私人消息。然而,对于这个问题,如果你帮助我的私人信息映射,我应该希望由我自己:)自己的工作组。然而,他们共享相同的数据,这是我挣扎了一下的地方:如何将密钥设置为完全相同的数据而没有重复。这是我到目前为止有: * *编辑 - 新代码 ** * **实体框架 - 具有相同数据的两个人

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data.Entity; 

namespace CodeFirstNewDatabaseSample 
{ 
    static void Main(string[] args) 
     { 
      using(var db = new PrivateMessageContext()) 
      { 
       Console.Write("Enter message: "); 
       var message = Console.ReadLine(); 
       var userFrom = "userFrom"; 
       var userTo = "userTo"; 
       var messageDetail = new PrivateMessageDetail(MessageDate = DateTime.Now, FromUser = userFrom, message = message); 
       var pm = new PrivateMessageHeader { User1 = userFrom, User2 = userTo, TimeStamp = DateTime.Now }; 
       pm.Messages.Add(messageDetail); 
       db.PrivateMessages.Add(pm); 
       db.SaveChanges(); 

       // Display all Blogs from the database 
       foreach(var pmsg in db.PrivateMessages) 
       { 
        var query = pmsg; 
        Console.WriteLine(pmsg.Message); 
       } 
       Console.ReadKey(); 
     } 
    } 
} 
public class PrivateMessage 
{ 
    public int PrivateMessageId { get; set; } 
    public string Message { get; set; } 
    public DateTime TimeStamp { get; set; } 

    // public int User1Id { get; set; } 
    public virtual string user1 { get; set; } 
    // public virtual User user1 { get; set; } 
    public virtual string user2 { get; set; } 
    //public int User1Id { get; set; } 
    // public virtual User user2 { get; set; } 
} 
public class User 
{ 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
} 
public class PrivateMessageContext : DbContext 
{ 
    public DbSet<PrivateMessage> PrivateMessages { get; set; } 
} 
public class Send 
{ 
/* void Send(userTo, userFrom, message) 
    { 
     using (var db = new PrivateMessageContext()) { 
      var query = from pm in db.PrivateMessages; 
      foreach(var msg in pm) 
      { 
       var user1 = msg.user1; 
       var user2 = msg.user2; 
       if ((user1==userTo && user2==userFrom) || (user1==userFrom && user2==userTo)) 
       { 
         msg.Message += message; 
         return; 
       } 
       else { 
      // pair doesn't exist 

        var PrivateMessage = new PrivateMessage { user1 = userFrom; user2 = userTo; TimeStamp = DateTime.Now; Message = message; }; 
        db.PrivateMessages.Add(PrivateMessage); 
        db.SaveChanges(); 
       } 
      }  
     }*/ 
} 

}

我现在被困在两件事情 - 如何创建一个可调用的类,用于检查是否存在以前的消息历史(Send())以及如何使用用户名而不是字符串...

谢谢

* 更新3 *

 static void Main(string[] args) 
     { 
      using(var db = new PrivateMessageContext()) 
      { 
       Console.Write("Enter message: "); 
       var message = Console.ReadLine(); 
       var userFrom = "userFrom"; 
       var userTo = "userTo"; 
       var messageDetail = new PrivateMessageDetail(MessageDate = DateTime.Now, FromUser = userFrom, message = message); 
       var pm = new PrivateMessageHeader { User1 = userFrom, User2 = userTo, TimeStamp = DateTime.Now, Message = messageDetail }; 
       db.PrivateMessages.Add(pm); 
       db.SaveChanges(); 

       // Display all Blogs from the database 
       foreach(var pmsg in db.PrivateMessages) 
       { 
        var query = pmsg; 
        Console.WriteLine(pmsg.Message); 
       } 
       Console.ReadKey(); 
     } 
    } 
} 
public class PrivateMessageContext : DbContext 
{ 
    public DbSet<PrivateMessageHeader> PrivateMessages { get; set; } 
} 
+0

我不知道我理解你的问题是什么。 “他们共享相同的数据”是什么意思?不应该有重复,因为两个用户不能发送相同的消息 –

+0

嗨,Erik,我的意思是我希望这些消息都保存在同一个私人消息中。因此,用户发送的每条消息都会附加到先前发送的消息中,因此会保存整个消息历史记录。 通过共享相同的数据基本上我的意思是,如果user1发送给用户2,他们都从同一个地方得到消息历史记录,并且他们没有相同消息历史的两个存储。无论如何,我编辑我的问题,因为我已经取得了一些进展:) – user2330270

回答

0

你可能需要的是某种形式的主/细节。你会做的是创建一个PrivateMessageHeader类型,这将包含私人消息中的参与者。然后你将有一个PrivateMessageDetail类型,它将包含实际的消息。标题和细节之间会有一对多关联。

因此,像这样:

public class PrivateMessageHeader { 
    public PrivateMessageHeader() { Messages = new List<PrivateMessageDetail>; } 
    public int PrivateMessageHeaderId {get;set;} 
    public DateTime ThreadTime {get;set;} // Date of the start of thread 
    public string User1 {get;set;} 
    public string User2 {get;set;} // this could be made to a list to allow multiples 

    public ICollection<PrivateMessageDetail> Messages {get;set;} 
} 

public class PrivateMessageDetail { 
    public int PrivateMessageDetailId {get;set;} 
    public DateTime MessageDate {get;set;} 
    public string FromUser {get;set;} // Don't need ToUser, it's already in header 
    public string Message {get;set;} 

    public PrivateMessageHeader parent {get;set;} 
} 
+0

谢谢你,我编辑了一个更新,但为什么我得到错误的行 var messageDetail = new PrivateMessageDetail(MessageDate = DateTime.Now, FromUser = userFrom,message = message); 非常感谢 – user2330270

+0

@ user2330270 - 既然你没有说出什么错误,我不知道。但是,实体框架要求对象具有无参数构造函数。如果那不是你的错误,那最终会是。 –

+0

构造函数创建新列表时出现问题: Messages = new List 您是否需要在构造函数中执行此操作? – user2330270

相关问题