2014-02-09 41 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

相關問題