0

我搜索了该网站,也搜索了谷歌,但无济于事。也许我累了,因此谷歌搜索错误的东西,我不知道。但我无能为力,真的可以使用一些帮助或建议。我正在使用 ASP.NET MVC 4 构建一个旅游站点,但在使用正确的查询来从数据库中获取我需要的所有信息时遇到了问题。

我有一个类 Safari,它存储有关特定 safari 的信息。我有另一个类 Highlight ,它存储有关特定 safari 的亮点的信息。因此,safari 在一对多的关系中可以有几个亮点。我最初在 Safari 中将亮点作为 List 类型的字段,但即便如此,我仍然无法播种和查询“亮点”的详细信息,并且没有在 Safari 表中创建“亮点”字段,所以我将亮点设置为一类。我仍然无法为 Highlight 字段播种,但由于创建了表,我可以手动完成(所以我知道表有数据)。

我希望能够查询数据库,不仅可以查询可用的 safaris,还可以查询它们的相关亮点。我还包括了 Safari、Highlight、SafarisController 和 Configuration 类。

Safari.cs

    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Zone { get; set; }
    public string Location { get; set; }
    public int Cost { get; set; }
    public List<Highlight> Highlights { get; set; 

高亮.cs

    public int Id { get; set; }
    public string Content { get; set; }
    public int SafariId { get; set; }

SafarisController.cs

    private ToursTravelDb db = new ToursTravelDb();
    public ActionResult Index()
    {
        var model = db.Safaris.ToList();
        return View(model);
    }

配置.cs

    protected override void Seed(Travel_Site.Models.ToursTravelDb context)
    {
        context.Safaris.AddOrUpdate(
            r => r.Name,
            new Safari 
            { 
                Name = "Tsavo East Safari", 
                Description = "This is a short Kenya safari tour", 
                Location = "Tsavo East National Park", 
                Cost = 1200, 
                Zone = "Nairobi",
                Highlights = new List<string>(new string{
                    "Tsavo East National park", 
                    "Views of local homesteads on safari route.", 
                    "Scenic Tsavo East savannah plains.", 
                    "Elephants, Giraffe, Zebra, Buffalo, Cheetah, Lions etc.", 
                    "Panoramic views of Tsavo East  during  lunch stop."
                })
            },
            new Safari 
            { 
                Name = "Amboseli Overnight Safari", 
                Description = "Camp at the Amboseli National Park. ", 
                Location = "Amboseli National Park", 
                Cost = 1200, 
                Zone = "Nairobi", 
                Highlights = new List<string>(new string{
                    "Amboseli National Park", 
                    "Hippopotatamus", 
                    "Flamingoes"
                })
            }
        );
    }

我感谢任何帮助或正确方向的指示。干杯

4

2 回答 2

0

您需要引用 Safari 而不仅仅是 Highlight 类中的 Id。根据我的经验,如果您在开发过程中将它们分开,则更容易调试此类关系,尤其是种子内容。

Safari.cs

[Key]
public int SafariId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Zone { get; set; }
public string Location { get; set; }
public int Cost { get; set; }
public List<Highlight> Highlights { get; set;  }

高亮.cs

[Key]
public int Id { get; set; }
public string Content { get; set; }
[ForeignKey("Safari")]
public int? SafariId { get; set; }
[ForeignKey("SafariId")]
public virtual Safari Safari { get; set; }

配置.cs

var safaris = new List<Safari>
    {
        new Safari
        {
            Name = "Tsavo East Safari", 
            Description = "This is a short Kenya safari tour", 
            Location = "Tsavo East National Park", 
            Cost = 1200, 
            Zone = "Nairobi"
        },
        new Safari 
        { 
            Name = "Amboseli Overnight Safari", 
            Description = "Camp at the Amboseli National Park. ", 
            Location = "Amboseli National Park", 
            Cost = 1200
        }
    };
safaris.ForEach(i => context.Safaris.Add(i));
context.SaveChanges();

var highlights = new List<Highlight>
    {
        new Highlight
        {
            Content = "Tsavo East National park",
            Safari = (from s in context.Safaris where Name == "Tsavo East Safari" select e)
        }
    };
highlights.ForEach(i => context.Highlights.Add(i));
context.SaveChanges();

我希望这可以帮助你...

于 2013-08-10T13:42:14.287 回答
0

一些有助于解决此问题的事情:

  1. 实体框架可以使用导航属性创建关系并创建相关数据。在 Safari.cs 中,使用通用集合。例如public virtual ICollection<Highlight> Highlights {get;set;}

  2. 从亮点到 safari 的导航属性不是必须的,但这绝对是有帮助的。

  3. 执行查询时,使用 .Include() 来“急切地”加载导航属性。例如 var model = db.Safaris.Include(s => s.highlights).ToList();

此外,您的种子方法是创建一个字符串列表,而不是突出显示列表。

于 2013-08-10T14:33:39.940 回答