查询以索引方法中基于匹配ID的实体

时间:2018-07-31 20:17:14

标签: c# sql asp.net asp.net-mvc entity-framework

我认为这是一个相对容易的问题,其中我缺少明显的东西。我正在尝试使用另一个对象的集合填充我的视图模型中的IEnumerable对象。

public class PostIndexData
{
    public IEnumerable<Post> Posts { get; set; }
    public Address Address { get; set; }
    public Animal Animal { get; set; }
    public Species Species { get; set; }
    public IEnumerable<Breed> Breeds {get;set;}
}

我正在尝试通过我的索引方法在班级AnimalID中访问Animal,并将其与班级AnimalID中的Breed进行比较。控制器:

    public  IActionResult Index(int? id)
    {
        var viewModel = new PostIndexData();
        viewModel.Posts = _context.Post
            .Include(i => i.Address)
            .Include(i => i.Animal)
            .Include(i => i.Animal.Species);

        //viewModel.Breeds = _context.Breed;
        if (id != null)
        {
            ViewBag.PostID = id.Value;
            viewModel.Animal = viewModel.Posts.Where(i => i.PostID == id.Value).Single().Animal;
            viewModel.Breeds = from s in _context.Breed.Where(i => i.AnimalID == viewModel.Animal.AnimalID) select s;
            viewModel.Address = viewModel.Posts.Where(i => i.PostID == id.Value).Single().Address;
        }

        return View(viewModel);
    }

此查询将返回Breed中的所有条目,而不返回基于Animal的具有当前AnimalID的相应品种。有谁知道更好的方法来处理此资源或可能的资源?谢谢

public enum Gender
{
    Male, Female
}

public class Animal
{
    //public Animal()
    //{
    //    this.Breeds = new HashSet<Breed>();
    //}
    [Required]
    public string AnimalName { get; set; }
    public int AnimalID { get; set; }
    [Required]
    public Gender Gender { get; set; }
    public byte[] Image { get; set; }

    public int PostID { get; set; }
    public Post Post { get; set; }
    public int SpeciesID { get; set; }
    public Species Species { get; set; }
    public ICollection<Breed> Breeds { get; set; }
}

它有ICollectionBreed作为导航属性(列出的许多品种可能为零)。

我的Breeds类如下:

public class Breed
{
    public int BreedID { get; set; }
    public int AnimalID { get; set; }
    [StringLength(50, ErrorMessage = "Breed cannot be longer than 50 characters.")]
    public string BreedName { get; set; }

    public Animal Animal { get; set; }
}

1 个答案:

答案 0 :(得分:0)

实际上,这似乎在没有任何更改的情况下可以正常工作。我只是退出Visual Studio并重新打开它。重建后有些更改没有生效,这有点令人讨厌。不确定是要保留还是删除它,因为它可能没那么有用...