我对EF 6来说是合情合理的,
小背景信息: 当前的数据库设置不允许作为数据库模式中的约束,因此所有关联都在代码中完成。另外,我们只在需要时显式加载关系,否则引用将为null。
问题是我将Mapping Task映射到Task_Postion ,我需要作为双向联想。
public TaskPositionMapping()
{
this.ToTable("MIC_Task_Position");
this.HasKey(p => new { p.TaskId, p.PositionId });
this.Property(p => p.TaskId).HasColumnName("NM_TASK");
this.Property(p => p.PositionId).HasColumnName("NO_POSITION_TYPE_COUNT").HasColumnType("int");
this.HasMany(p=>p.Tasks).WithRequired(p => p.TaskPosition).HasForeignKey(p=>p.TaskId);
}
,
public TaskMapping()
{
this.ToTable("MIC_Task");
this.HasKey(p => p.TaskId);
this.Property(p => p.TaskId).HasColumnName("NM_TASK");
this.HasMany(p => p.TaskSkills);
this.HasRequired(p => p.TaskPosition).WithMany(p => p.Tasks).HasForeignKey(p => p.TaskId);
}
,
public partial class Task
{
public Task()
{
}
public string TaskId { get; set; }
[DataMember, IgnoreDataMember()]
public virtual ICollection<TaskSkill> TaskSkills { get; set; }
[DataMember, IgnoreDataMember()]
public virtual TaskPosition TaskPosition { get; set; }
}
,
public class TaskPosition
{
public string TaskId
{
get;
set;
}
public short PositionId
{
get;
set;
}
[DataMember, IgnoreDataMember()]
public virtual Task Task { get; set; }
}
我收到了错误:
TaskPosition_Tasks_Target :: Multiplicity在Role中无效 'TaskPosition_Tasks'关系中的'TaskPosition_Tasks_Target'。 因为从属角色是指关键属性,所以是上层 依赖角色的多样性的界限必须为'1'。
TaskPosition_Tasks_Source_TaskPosition_Tasks_Target ::数量 关系中的从属和主要角色中的属性 约束必须相同。
答案 0 :(得分:0)
问题被确定为关系倒退。
EF 6不允许上述关系,因为外键签名需要与主键匹配。
将One切换为Many允许在TaskId上使用Key - Foreign Key关系
如果您需要具有上述描述的关系,似乎您需要在EF 6之外手动处理,并且需要单独调用您的存储库以在需要时填充数据。