C#按实体框架

时间:2016-02-19 17:12:36

标签: c# entity-framework

我想知道使用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。

如果我无法实现这一目标,则意味着我必须为每个库存项目创建一个打印作业,这对我来说并不理想。

1 个答案:

答案 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();