【发布时间】:2019-02-24 14:01:33
【问题描述】:
我有一个 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);
}
【问题讨论】:
-
一个资产有两个校准。咬紧牙关,让模型反映这一点。添加校准不会增加资产。如果你走这条路,你总是很难找到不同的资产。
-
同意,但
ASSET和CALIBRATION的一对一关系我将report_asset_id作为 Asset 表上的 PK 并且将report_asset_id命名为 Calibration 表上的 PK 和 FK。更改架构不会导致我的数据丢失吗?如前所述,我使用的是 EF6-Code First 方法。
标签: entity-framework database-design asp.net-mvc-5