多个表更新MVC .net

时间:2017-05-06 05:56:55

标签: asp.net-mvc linq

我是MVC的新手,这是我的功能。有三个表(Order,OrderNotes,Notes),ID是它们的主键。一个Order可以有很多Notes,表OrderNotes有外键OrderID(来自Booking表)和NotesID(来自Notes表)。我希望有一个Order Edit页面来显示单个Order(FirstName,LastName),还显示其Notes列表。这是我的数据库结构:

  1. 预订表: {ID, 名字, 姓 }

  2. BookingNotes表格: {ID, BookingID, NotesID }

  3. 备注表: {ID, NoteName, StatusID }

  4. 那么如何实现Notes列表,因为它来自多个表?它将能够创建新笔记,删除列表行记录中的现有笔记,而不是编辑。 Linq用于数据库查询。感谢。

1 个答案:

答案 0 :(得分:0)

最好只有2个表:

public class Book
{
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    // Navigational properties
    public virtual List<Note> Notes { get; set; }
}

public class Note
{
    public int ID { get; set; }
    public int BookID { get; set; }
    public string NoteName { get; set; }
    public int StatusID { get; set; }

    // Navigational properties
    public virtual Book Book { get; set; }
    public virtual Status Status { get; set; }
}

当您想要为不同的预订重复使用相同的Note时,第三个表格非常有用。但我认为情况并非如此。

因此,要检索上下文的数据,请确保您拥有DbSet<Book>

public class ApplicationDbContext : DbContext
{
    public virtual DbSet<Book> Bookings { get; set; }
}

在您的控制器中(或在存储库类中更好):

var BookingID = 10; // this is parameter passed to the function
var myBooking = this.dbContext.Bookings
    .Include(p => p.Notes)
        .ThenInclude(p => p.Status)
    .FirstOrDefault(p => p.ID == BookingID);

将检索到的预订映射到ViewModel,将其传递给视图,您就可以了。