繁体   English   中英

C#按实体框架向自动生成的表中添加一列

[英]C# Add a column to Auto-Generated Table by Entity Framework

我想知道使用实体框架是否可以实现此方案。

我使用的是Code-First,并且定义了如下领域模型:

public class PrintJob
{

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    public int Id { get; set; }

    public virtual ICollection<StockItem> stockItemstoPrint { get; set; }

}

如果我将以上内容留给Entity Framework并添加更新数据库的迁移而未在StockItems模型中添加外键(这是我不希望的,因为我宁愿没有双向链接) ,它将为我命名为PrintJobStockItems,它将保存PrintJobID和StockItemID
-但这很好,但我想知道是否要向带有Bool'Printed'的PrintJobStockItems添加属性,可以做到这一点并且有逻辑来更新该bool值吗? 原因是,我希望能够为每个单独的库存项目设置是否已打印-当然不针对stockItem Model,因为它不应该知道PrintJobs。

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

您无法访问后台联接表,但是解决方法是创建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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM