![](/img/trans.png)
[英]How to add custom method to auto-generated class in Entity Framework?
[英]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.