我想知道使用Entity Framework是否可以实现这种情况。
我正在使用Code-First并定义了一个域模型,如下所示:
public class PrintJob
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int Id { get; set; }
public virtual ICollection<StockItem> stockItemstoPrint { get; set; }
}
如果我将上述内容留给实体框架并添加迁移更新数据库而不在StockItems模型中添加外键(我不想要,因为我不喜欢两个-way link)它将为我创建一个名为PrintJobStockItems的表,它将保存PrintJobID和StockItemID
- 但这很好,但我想知道我是否想用一个bool&#39; Printed&#39;添加一个属性到PrintJobStockItems。它可以完成并有逻辑来更新该bool值吗?原因是,我希望能够为每个单独的库存项目设置是否已经打印 - 当然不是针对stockItem模型,因为它不应该知道PrintJobs。
如果我无法实现这一目标,则意味着我必须为每个库存项目创建一个打印作业,这对我来说并不理想。
答案 0 :(得分:1)
您无法访问幕后联接表,但解决方法是为manys创建2个:
public class StockItem
{
public int Id { get; set; } // Identity, Key is default by convention so annotation not needed
public virtual ICollection<StockItemPrintJob> StockItemPrintJobs { get; set; }
}
public class PrintJob
{
public int Id { get; set; } // Identity, Key is default by convention
public virtual ICollection<StockItemPrintJob> StockItemPrintJobs { get; set; }
}
public class StockItemPrintJob
{
[Key, Column(Order = 0)]
public int StockItemId { get; set; }
[Key, Column(Order = 1)]
public int PrintJobId { get; set; }
public bool IsPrinted { get; set; }
public virtual StockItem StockItem{ get; set; }
public virtual PrintJob PrintJob { get; set; }}
}
然后你可以做类似
的事情var item = context.StockItemPrintJob.First(sp => sp.StockItemId == stockId && sp.PrintJobId == printJobId);
item.IsPrinted = true;
context.SaveChanges();