In meiner ServiceStack App implementiere ich einen einfachen Chat, wo 2 Benutzer einen Dialog haben können. Der Einfachheit halber habe ich gerade ein Textnachrichten-Tabelle, die die folgenden Felder enthält:ServiceStack OrmLite mehrere Referenzen des gleichen Typs laden
public class TextMessage
{
[AutoIncrement]
[PrimaryKey]
public int Id { get; set; }
[References(typeof(MyUserAuth))]
public int FromUserId { get; set; }
[References(typeof(MyUserAuth))]
public int ToUserId { get; set; }
[Reference]
[ForeignKey(typeof(MyUserAuth))]
public MyUserAuth FromUser { get; set; }
[Reference]
[ForeignKey(typeof(MyUserAuth))]
public MyUserAuth ToUser { get; set; }
//TimeZoneInfo.ConvertTimeToUtc(dateNow);
public DateTime UtcReceivedOn { get; set; }
public string Text { get; set; }
}
Mein USERAUTH erbt die Basis ein und fügt 2 weitere Felder:
public class MyUserAuth : UserAuth
{
public List<TextMessage> TextMessagesAsAuthor { get; set; }
public List<TextMessage> TextMessagesAsRecipient { get; set; }
}
Lassen Sie uns jetzt sagen, dass ich einige erstellen einige Nachrichten Benutzer und dann:
var msg1 = new TextMessage { FromUserId = 1, ToUserId = 2, UtcReceivedOn = dt, Text = "Hello" };
var msg2 = new TextMessage { FromUserId = 1, ToUserId = 3, UtcReceivedOn = dt, Text = "Hello" };
var msg3 = new TextMessage { FromUserId = 1, ToUserId = 4, UtcReceivedOn = dt, Text = "Hello" };
var msg4 = new TextMessage { FromUserId = 1, ToUserId = 4, UtcReceivedOn = dt, Text = "Hello" };
und dann versuche ich meine Benutzer zu lesen:
var user = db.LoadSingleById<MyUserAuth>(1);
Das Problem hier ist, dass der Benutzer 4 Nachrichten in beiden TextMessagesAsAuthor
und TextMessagesAsRecipient
hat, während logisch 4 in TextMessagesAsAuthor
und 0 in TextMessagesAsRecipient
sein sollte. Wie kann ich OrmLite mitteilen, diese beiden Eigenschaften zu unterscheiden?