我有一个Web应用程序,被工程师用于站点上的资产(机器,秤)校准,并且可以基于这些读数生成证书。到目前为止,要求是对于给定的SITE
包括多个ASSET
,每个资产都有自己的CALIBRATION
。
我的模态也这样吗?
最近进行了更改,以包括新型证书。 ASSET
可以进行多次校准(准确地说是两次),如果需要,可以进行一次校准,如果需要,可以进行一次校准。
我的问题是,适应这种变化的最佳方法是什么?我是否应该将ASSET
一对一CALIBRATION
之间的关系更改为具有多重性(1..2)的一对多关系,这基本上需要更改很多代码检查。或应在ASSET
表中添加另一列,该列指向同一表中的另一个条目。还是有其他选择方式?
我正在使用带有实体框架的ASP.MVC。
映射
public Report_AssetMap()
{
HasKey(one => one.report_asset_id);
// Site_Report one-to-many-rel Report_Asset
HasRequired(one => one.Site_Report).WithMany(one => one.Report_Assets).HasForeignKey(one => one.site_report_id);
// Report_Asset one-to-one-rel Asset_Calcert
HasOptional(one => one.Asset_Calcert).WithRequired(ad => ad.Report_Asset).WillCascadeOnDelete(true);
}
public Asset_CalcertMap()
{
HasKey(one => one.report_asset_id);
// User one-to-many Asset_Calcert (with nullable Calcert_handled_by_id at many End)
HasOptional(o => o.Calcert_Handled_By).WithMany(r => r.Handled_Calcert).HasForeignKey(o => o.calcert_handled_by_id);
}
答案 0 :(得分:0)
对于每个调整前和调整后证明,我都会有一个单独的表格;这是每个表类继承的可靠用例(EF Core尚未包含该表,但我猜您正在使用EF6)。将公共属性放在基类中,派生用于调整前和调整后证书的类(如果除表名外没有区别,则可以为空),然后MapInheritedProperties
并在模型配置中为派生类指定不同的表名。
如果您随后要查询所有Asset_CalCert
,则可以在DbSet<Asset_Caclert>
中指定一个DbSet
DbContext
来查询Report_Asset
实体可以具有引用每种派生的Asset_CalCert
类型的属性。
通过这种方式,您可以保持自己的1 :?关系,同时保持查询所有Asset_CalCert
的能力,就像它们在单个表中一样。