实体框架 - 两个人拥有相同的数据

时间:2014-02-09 20:02:56

标签: c# entity-framework-6

我想在实体框架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())以及如何使用User用户名而不是字符串......

谢谢

* 更新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; } 
} 

1 个答案:

答案 0 :(得分:0)

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

这样的事情:

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;}
}