簡體   English   中英

實體框架-具有相同數據的兩個人

[英]entity framework - two people with the same data

我想在實體框架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; } 
} 

您可能想要的是某種主/詳細信息。 您將要做的是創建一個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;}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM