1

我正在尝试在我的 MVC 模型中使用继承。项目中有两个地方,用户可以记录某些设备的损坏情况。当它被移动或只是在库存盘点期间。我有: 运输 运输详情

StockCheck 库存检查详情

Details 模型都是某种对象的集合。可以针对单个 Detail 项目创建单个损坏记录。我创建了一个抽象的损坏模型,可以记录损坏的详细信息。

所以我有 2 个模型继承自 Damage TransportDetailDamage 和 StockDetailDamage

然后,我的 TransportDetail 记录可以有 0 个或 1 个 TransportDetailDamage 记录。StockCheckDetail 记录也可以有 0 或 1 个 StockDetailDamage 记录。

我目前的模型是(为简洁起见,只是运输和大多数道具被移除):

public class TransportDetail {
    public int TransportDetailID { get; set; }

    public int TransportID { get; set; }
    public Transport Transport { get; set; }

    public TransportDamage TransportDamage { get; set; }
}
public abstract class Damage {
    public int DamageID { get; set; }
    public string Description { get; set; }
}
public class TransportDamage : Damage {
    public TransportDetail TransportDetail { get; set; }
}

我不断收到从主体端到定义的无效键的错误。我也非常希望能够使用 Fluent API 定义字段名称,这样我就不会得到 TransportDamage_DamageID 等之类的东西

编辑:好的,我添加了一些 Fluent API,似乎可以让模型正常工作,但它似乎并不完全正确,TransportDetail 当然可以有 Optional TransportDamage 但 TransportDamage 需要 TransportDetail 存在.... .Map 确实涵盖数据库中可怕的自动字段名称通过:)

modelBuilder.Entity<TransportDetail>()
  .HasOptional(x=>x.TransportDamage)
  .WithOptionalPrincipal(x=>x.TransportDetail)
  .Map(t=>t.MapKey("TransportDetailID"));

这是最好的方法吗?

4

1 回答 1

0

可能是这个问题是由于类的属性定义。您在 TransportDetail 类中定义了“TransportDamage”类型的属性,在 TransportDamage 类中定义了“TransportDetail”类型的属性。

于 2014-11-06T15:02:25.587 回答