【问题标题】:Eager Loading Include use issue急切加载包括使用问题
【发布时间】:2017-01-07 03:39:17
【问题描述】:

我对 MVC 和实体框架非常陌生,我正在尝试遵循 asp.net 教程,但遇到了一个主要障碍。我有一个正确显示的表,但在表中显示外键而不是参考表中的数据。我想我想在这里使用急切加载,但我不确定在哪里放置我的包含。我相信 asp.net 上的教程适用于旧版本的 MVC。我知道我的包含应该放在下面的 sn-p 中。我正在尝试包括艺术家类型。

首先,我的模型类的一部分:

        modelBuilder.Entity<tblArtist>()
            .HasMany(e => e.tblArtisttblArtistType)
            .WithRequired(e => e.tblArtist)
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<tblArtist>()
            .HasMany(e => e.tblIssueArtist)
            .WithRequired(e => e.tblArtist)
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<tblArtist>()
            .HasMany(e => e.tblIssueAutograph)
            .WithRequired(e => e.tblArtist)
            .WillCascadeOnDelete(false);

        modelBuilder.Entity<tblArtistType>()
            .HasMany(e => e.tblArtisttblArtistType)
            .WithRequired(e => e.tblArtistType)
            .WillCascadeOnDelete(false);

还有我的控制器代码:

public class tblArtistsController : Controller
{
    private joerdieComicsModel1 db = new joerdieComicsModel1();

    // GET: tblArtists
    public ActionResult Index()
    {

        return View(db.tblArtist.ToList());
    }

    // GET: tblArtists/Details/5
    public ActionResult Details(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        tblArtist tblArtist = db.tblArtist.Find(id);
        if (tblArtist == null)
        {
            return HttpNotFound();
        }
        return View(tblArtist);
    }

我知道包含代码应该放在公共 ActionResult Index() 方法中,但我不知道它是如何完成的。

谢谢。

【问题讨论】:

  • 您特别想急切加载/显示哪些信息/数据?
  • 来自 tblArtistType 的艺术家类型以及现在显示的数据。这是艺术家表中的数据。
  • Artist 和 ArtistTypes 是如何连接的?您能否将这些类的相关部分添加到问题中。
  • 我很高兴在我的问题中添加更多我的课程。但我认为它就在那里。不过我可能是错的。 Artist 和 ArtistType 通过 tblArtisttblArtistType 连接。该表具有 tblArtist 和 tblArtistType 的外键。这是否回答你的问题?对不起,如果我不清楚。

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


【解决方案1】:

当你有多对多关系实体框架时 自动创建表接口,但对具有外键的关系 你的模特必须是“EX : ArtistId”。

例如: Person.cs

  public class Person
  {
    public int Id { get; set; }

    public string Name { get; set; }

    public ICollection<Book> Books { get; set; }
  }

Book.cs

    public class Book
{
    public int Id { get; set; }

    public string Name { get; set; }

    public Person Person { get; set; }

    public int PersonId { get; set; }
}

在模型生成器中:

 modelBuilder.Entity<Person>()
             HasMany(_ => _.Books)
            .WithRequired(_ => _.Person)
            .HasForeignKey(_ => _.PersonId)
            .WillCascadeOnDelete();

然后看: One To Many

【讨论】:

  • 好的。我开始在这里得到它。我的模型生成器看起来不错。我的每个类, tblArtist 和 tblArtistType 现在都有 public virtual ICollection artistTypes { get;放; } 和 "public virtual ICollection 艺术家 { get; set; }" 分别。但是在我的索引页面上,我尝试使用 @Html.ListBox("artistTypes", new SelectList(item.artistTypes, "tblArtistTypeID", "ArtistType")) 并且在 'dbo.tblArtistTypetblArtists' 上收到无效对象错误在我的构建中不存在任何地方。我的连接表确实有它自己的 ID。会不会是这个问题?
猜你喜欢
  • 1970-01-01
  • 2015-10-12
  • 2017-12-26
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多