我是MVC的新手,这是我的功能。有三个表(Order,OrderNotes,Notes),ID是它们的主键。一个Order可以有很多Notes,表OrderNotes有外键OrderID(来自Booking表)和NotesID(来自Notes表)。我希望有一个Order Edit页面来显示单个Order(FirstName,LastName),还显示其Notes列表。这是我的数据库结构:
预订表: {ID, 名字, 姓 }
BookingNotes表格: {ID, BookingID, NotesID }
备注表: {ID, NoteName, StatusID }
那么如何实现Notes列表,因为它来自多个表?它将能够创建新笔记,删除列表行记录中的现有笔记,而不是编辑。 Linq用于数据库查询。感谢。
答案 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
,将其传递给视图,您就可以了。