我正在将旧的ASP应用程序迁移到现代.NET版本,以减少我们正在研究.NET 4.0实体框架的开发时间。但是,我们似乎在这个问题上遇到了障碍。
鉴于我们数据库的一小部分: 表OBJECT,包含汽车列表及其各自的属性。我们还有一个表OBJECT_OPTIONS,对于OBJECT中的给定汽车,它包含一个OPTIONS,ACCESSORIES和STANDARD EQUIPMENT列表。这三种类型都具有相同的字段,因此存储在同一个表中。列ncopt_type用于区分不同的列表。可能的值有:'opt','acc'和'sta'。表OBJECT_OPTIONS通过ncopt_obj_id链接到OBJECT,表示OBJECT表中的唯一汽车(obj_id)。
我们的目标是为OBJECT实体提供3个链接到不同OBJECT_OPTIONS列表的属性: - 属性选项 - 财产配件 - 物业STANDARDEQUIPMENT
我们已尝试通过继承模型对每个层次表进行不同的教程和演练,但未成功创建可构建模型。
从技术上讲,我们所做的是:
在此设置过程中出现了一堆错误,但我们最终得到了这个错误:
错误3032:从第250,286行开始映射片段时出现问题:EntityTypes NCO.Model.OPTION,NCO.Model.ACCESSOIRE,NCO.Model.STANDAARD_EQUIP被映射到表OBJECT_OPTIES中的相同行。映射条件可用于区分这些类型映射到的行。
但是所有三个物体都存在条件。
我找不到解决这个问题的方法,并且已经花费了太多时间。我们目前正在使用一种解决方法,但我希望能够解决这个问题,因为在项目结束时这种情况会再出现几次。
任何帮助表示感谢,如果您需要更多信息,请给我发表评论或发送电子邮件。
答案 0 :(得分:1)
我不相信你可以100%从EF设计师那里做到这一点,但你可以这样做:
- 创建实体OBJECT(我已为此示例重命名为“Vehicle”)
- 创建实体OBJECT_OPTIONS,使其成为抽象
- 使用basetype添加实体OPTION,ACCESSORY和STANDARD_EQUIP OBJECT_OPTIONS
- 在ncopt_type ='...'
上为所有三个表添加条件 醇>
然后使用Vehicle的分部类添加所需的属性:
using System.Collections.Generic;
using System.Linq;
public partial class Vehicle
{
public IEnumerable<ACCESSORY> Accessories
{
get { return this.OBJECT_OPTIONS.OfType<ACCESSORY>(); }
}
public IEnumerable<OPTION> Options
{
get { return this.OBJECT_OPTIONS.OfType<OPTION>(); }
}
public IEnumerable<STANDARD_EQUIP> StandardEquipments
{
get { return this.OBJECT_OPTIONS.OfType<STANDARD_EQUIP>(); }
}
}