C# EF6可选1:1包括不工作
正在尝试设置基本EF6可选1:1。非常令人沮丧。我读了很多,也丢了很多帖子 我有两个实体,客人和座位,每一个都可以独立存在,一个座位不需要客人,一个客人不需要座位 嘉宾模式:C# EF6可选1:1包括不工作,c#,entity-framework,linq,eager-loading,C#,Entity Framework,Linq,Eager Loading,正在尝试设置基本EF6可选1:1。非常令人沮丧。我读了很多,也丢了很多帖子 我有两个实体,客人和座位,每一个都可以独立存在,一个座位不需要客人,一个客人不需要座位 嘉宾模式: public int ID { get; set; } public int? SeatID { get; set; } [Required] public string FirstName { get; set; } //Link to
public int ID { get; set; }
public int? SeatID { get; set; }
[Required]
public string FirstName { get; set; }
//Link to Seat
public Seat Seat { get; set; }
座椅型号:
public int ID { get; set; }
public int? GuestID { get; set; }
[Required]
public string SeatNumber { get; set; }
public bool Occupied { get { return (GuestID == null ? true : false); } }
//Link to Guest
public Guest Guest{ get; set; }
说到这一点,我遇到了很多问题。我必须将此添加到我的模型创建中,才能使关系正常工作:
modelBuilder.Entity<Seat>()
.HasOptional(g => g.Guest)
.WithOptionalDependent(s => s.Seat);
在我看来,我使用
@Html.DisplayFor(modelItem => item.Guest.FirstName)
我想知道如何使include语句工作,最好不要延迟加载(如果必须的话,甚至使用)。另外,我不想有一张座位分配表,我考虑过沿着这条路走
我可以使用Viewmodel来实现这一点,但我不明白为什么1:1可选项没有加载相关数据
根据要求,这里是生成的模式…这里肯定发生了一些奇怪的事情。作为补充说明,我可以让它与viewmodel一起工作,但我不想
1-0..1关系配置与您想要的方式不同
public class Guest
{
public int ID { get; set; }
[Required]
public string FirstName { get; set; }
public IList<Seat> Seats { get; set; }
}
public class Seat
{
public int ID { get; set; }
[Required]
public string SeatNumber{ get; set; }
public IList<Guest> Guests { get; set; }
}
配置
modelBuilder.Entity<GuestSeat>()
.HasKey(gs => new {gs.GuestID,gs.SeatID})
.ToTable("GuestSeats");
modelBuilder.Entity<GuestSeat>()
.HasRequired(g=>g.Guest)
.WithMany(g=>g.Seats)
.HasForeignKey(gs =>gs.GuestID)
.DeleteOnCascade(false);
modelBuilder.Entity<GuestSeat>()
.HasRequired(s=>s.Seat)
.WithMany(s=>s.Guests)
.HasForeignKey(gs =>gs.SeatID)
.DeleteOnCascade(false);
modelBuilder.Entity()
.HasKey(gs=>new{gs.GuestID,gs.SeatID})
.ToTable(“旅客服务”);
modelBuilder.Entity()
.HasRequired(g=>g.Guest)
.有许多(g=>g座位)
.HasForeignKey(gs=>gs.GuestID)
.DeleteOnCascade(假);
modelBuilder.Entity()
.HasRequired(s=>s.Seat)
.有许多(s=>s.客人)
.HasForeignKey(gs=>gs.SeatID)
.DeleteOnCascade(假);
此解决方案提供以下功能
SeatID
和ReservedDate
上创建一个唯一索引希望这将帮助您您必须构建如下所示的模型
public class Guest
{
public int GuestId { get; set; }
[Required]
public string FirstName { get; set; }
//Link to Seat
public virtual Seat Seat { get; set; }
}
public class Seat
{
public int SeatId { get; set; }
[Required]
public string SeatNumber { get; set; }
public bool Occupied { get { return (GuestID == null ? true : false); }}
//Link to Guest
public virtual Guest Guest{ get; set; }
}
Fluent API映射:
modelBuilder.Entity<Seat>()
.HasOptional(g => g.Guest)
.WithOptionalDependent(s => s.Seat);
你能展示不同的genretated表模式吗?把它添加到我的问题中,现在我知道它为什么不起作用了,但我更不清楚它是如何产生的。这两个答案都会起作用……但都不能完全完成我试图做的事情,也不能使include语句起作用。我将其标记为正确的,因为它更接近我用于解决方案的内容。两个答案都不能完全实现我想要做的事情。include语句仍然不适用于此解决方案。我使用Viewmodel来显示应该与include语句一起使用的相关信息。谢谢你们的建议,先生们,我能做些事情。两种解决方案都是正确的,各有各的特点。欢迎:)。希望你能给出自己的答案?
public class Guest
{
public int GuestId { get; set; }
[Required]
public string FirstName { get; set; }
//Link to Seat
public virtual Seat Seat { get; set; }
}
public class Seat
{
public int SeatId { get; set; }
[Required]
public string SeatNumber { get; set; }
public bool Occupied { get { return (GuestID == null ? true : false); }}
//Link to Guest
public virtual Guest Guest{ get; set; }
}
modelBuilder.Entity<Seat>()
.HasOptional(g => g.Guest)
.WithOptionalDependent(s => s.Seat);
var seats = db.Seats.Include(s => s.Guest).ToList();