继承基类上的微风导航属性不会将父级映射到子级



我有一些C#类在Web API的服务器端使用继承。基类/超级类具有一些"一对二多"导航属性,这些属性对所有继承的类都是通用的。这些类别不是EF或NH类别。

Breeze在元数据中正确生成基类和继承类,并在继承类上正确显示基类的导航属性。

从API加载数据时,微风正确地"链接"链接导航属性的"子"->"父"侧,但不映射基类上的反向"父"->"子"关系。

如果我将导航属性移动到继承的子类,从基类/超级类中移出,那么Breeze将正确地将所有关系从Parent链接到child,从child链接到Parent。

public class Fine
{
   public int Id { get; set; }       // Primary Key
   public int VehicleId {get; set; } // Foreign Key
   public decimal Amount { get; set; }
   ... etc
}
public class Vehicle
{
   public int Id { get; set; } //Primary Key
   ... other common properties
   public IList<Fine> Fines { get; set; }  // Common nav property
}
public class Motorcycle
{
   public string MudguardColour { get; set; }
   ... other specific properties
}
public class MotorVehicle
{
   public string BumperColour { get; set; }
   ... other specific properties
}

Breeze在客户端创建正确反映上述形状的实体,并具有ko.observable和ko.obsservablearray的一对多(Vehicle->Fines)属性。

如果我先在服务器上查询摩托车和摩托车的列表,一切都很好。然后,我分别查询罚款列表,并正确链接与特定车辆相关的"罚款"。我可以说"fine.motorVehicle.id"或"fine.motorCycle.id",这取决于类型,并获得基类/超类属性,如id。

然而,Breeze并没有将"vehicle.fines"、"motorVehicle.fines"或"motorCycle.fines"导航属性联系起来。即使"精细"实体正确链接到车辆、摩托车和摩托车实体,它们仍然是空数组。

如果将导航属性移动到子类/继承类,则breeze将按预期正确链接实体。

public class Fine
{
   public int Id { get; set; }       // Primary Key
   public int VehicleId {get; set; } // Foreign Key
   public decimal Amount { get; set; }
   ... etc
}
public class Vehicle
{
   public int Id { get; set; } //Primary Key
   ... other common properties
   //public IList<Fine> Fines { get; set; }  // Common nav property
}
public class Motorcycle
{
   public string MudguardColour { get; set; }
   ... other specific properties
   public IList<Fine> Fines { get; set; }  // Common nav property now in child class
}
public class MotorVehicle
{
   public string BumperColour { get; set; }
   ... other specific properties
}

这给了我"fine.vehicle.id"、"fine.motorVehicle.bumprColour"one_answers"fine.MotorCycle.mudguardColour",以及父->子关系"vehicle.fines[0]。amount"one_answers"MotorCycle.fines[0]。amont"。

当这些导航属性在基类/超级类上时,我如何轻松设置它们,以避免在子类/继承类上重复它们?

PS:我既不使用EF也不使用NH,但我的元数据是基于NH布局(来自breeze NH样本)以及breeze文档以及所需的外键等进行建模的。

PPS:所有这些都适用于不使用继承设置的普通类。

希望我已经充分解释了?

上述问题的解决方案是确保基类和导航属性类的"associationName"在其元数据中具有相同的"关联"属性"名称"。

基本类别:

navigationProperties: [{nameOnServer: Fine, entityTypeName: Fine, isScalar: false, associationName: AN_Fine_FineId, invForeignKeyNamesOnServer: [Id]

相关类别:

navigationProperties: [{nameOnServer: Vehicle, entityTypeName: Vehicle, isScalar: true, associationName: AN_Fine_FineId, foreignKeyNamesOnServer: [Id]}]

最新更新