1

抱歉,如果标题有点不清楚/模棱两可,但我不确定如何通过 Fluent API 绑定以下代码(如果甚至需要)

public class ChatUser 
{
    [Key]
    public int ChatUserId { get; set; }
    public string Name { get; set; }

    public bool IsOnline { get; set; }
    // other properties

    // navigation properties
    public ICollection<ChatMessage> Messages { get; set; }
}

public class ChatMessage
{
    [Key]
    public int ChatMessageId { get; set; }
    public string Message { get; set; }

    public int UserFromId { get; set; }
    public int UserToId { get; set; }

    public DateTime DateSent { get; set; }

    // navigation properties
    public ChatUser UserFrom { get; set; }
    public ChatUser UserTo { get; set; }
}

我遇到的问题是让两个"ChatUser"对象绑定到UserFromIdand UserToId- 它们都以null.

我需要能够访问来自用户的“消息”列表,并且当我有一个Message对象时,我需要能够访问两者UserFromUserTo这样我才能获得诸如Name.

如果有人能指出我正确的方向/我可以从中学到的任何链接,我将不胜感激。

PS,如果我想要达到的目标有适当的术语,有人可以告诉我吗 - 我不确定谷歌用什么来解决我的问题!

4

2 回答 2

3

你的问题有两个部分。

首先,为了正确延迟加载关系,需要将它们标记为virtual. 这至少适用UserFromUserToMessages

其次,单个集合属性不可能从关系的双方加载元素。但这很容易通过 LINQ-to-objects 投影来实现:

public virtual ICollection<ChatMessage> MessagesFrom { get; set; }
public virtual ICollection<ChatMessage> MessagesTo { get; set; }

public virtual IEnumerable<ChatMessage> Messages
{
    get { return MessagesFrom.Concat(MessagesTo); }
}

您需要使用 fluent API来映射MessagesFrom到.UserFromMessagesToUserTo

这将是围绕线的东西.HasMany(x => MessagesFrom).WithRequired(x => x.UserFrom); 您可以使用智能感知和文档来找出确切的形式。

于 2012-12-10T12:22:20.063 回答
-4

这是一个示例。

public class Class1
{
    ChatUser user1 = new ChatUser();

    public Class1()
    {
        //List of Message for current User
        List<ChatMessage> lstChatMessages = user1.Messages.ToList();

        //Take firstMessage in sequence
        ChatMessage firstMessage = lstChatMessages.FirstOrDefault();

        //User from
        ChatUser UserFrom = firstMessage.UserFrom;

        //User To
        ChatUser UserTo = firstMessage.UserTo;

    }
}

开始阅读一些 .Net 书籍

于 2012-12-10T09:43:57.623 回答