0

我有这样的东西:(伪代码)

public class Author
{
   int id;
   public List<Thread> Threads;
   public List<ThreadPoints> ThreadPointses;
}

public class Thread
{
   int id;
   public List<ThreadPoints> ThreadPointses;
}

public class ThreadPoints
{
   int id;
   int Points;
}

而且我不确定上面是否正确,但现在我想获得指定作者在指定线程中的点数。我不能直接调用ThreadPoints.Thread_id,因为它不可访问,即使它物理上在数据库中。那么我需要改变我的模型,还是我不知道一些有用的方法?


所以基本上,我的模型看起来像这样:

    public class Account
    {
        [Key]
        public Guid AccountId { get; set; }
        public string UserName { get; set; }
        public List<Post> Posts { get; set; }
        public List<Post> ModifiedPosts { get; set; }
        public List<Thread> Threads { get; set; }
        public List<ThreadPoints> ThreadPointses { get; set; }
        public List<Thread> LastReplied { get; set; }
        public int Points { get; set; }
    }

    public class Thread
    {
        [Key]
        public int Id { get; set; }
        public List<ThreadPoints> ThreadPointses { get; set; } 
        public List<Post> Posts { get; set; }
        public int CurrentValue { get; set; }
        public int NumberOfPosts { get; set; }
        public int TotalValue { get; set; }
        public int Views { get; set; }
        public string Title { get; set; }
        public DateTime DateCreated { get; set; }
    }

    public class ThreadPoints
    {
        [Key]
        public int Id { get; set; }
        public int Points { get; set; }
    }

我需要的是,当用户创建一个线程时,他会给它一些分数。在下一个动作中,我想(从数据库中)获取那么多点,并增加它。但我只有线程 ID 作为输入信息。

您的答案可能很好,(就我正在尝试实现它而言),但无论如何,我不确定这个模型。也许我应该手动将外键添加到我的模型中?它肯定会更简单,但是我的数据库中有两个外键......

4

1 回答 1

2

由于您没有显式映射 FK,实体框架正在生成它们并将它们隐藏起来,因此要获取属性的 Id,您需要遵循导航集合。

我不确定您的问题,但是您是否想要给定作者Points的特定内容中的 ,数量?Threadpoint你的模型似乎不能很好地支持这一点,但你可以做这样的事情-

public int GetPoints(Author author, Thread thread)

    {
      int points = author.Threads.FirstOrDefault(t => t.id == thread.id).ThreadPointses.Sum(tp => tp.Points);
    }

这将返回指定作者的线程点列表中包含的所有点的总和,这些点包含在与您传入的线程具有相同 id 的线程列表中。

如果这对您不起作用 - 您可以发布您的实际模型吗?

于 2012-08-19T22:49:33.350 回答