我一直在这个小时,并尝试了很多建议,我发现搜索,但没有运气。我使用的代码第一个EF 5.如何将一个代码第一个对象中的两个属性映射到相同的父类型
情况是,我有一个班员工。然后我有另一个有两个属性的类,它们都是Employee类型。我希望这些都是外键约束,但是这些要求允许来自和来自相同用户的许多相同请求,所以我不能将它们用作键。我真的不在乎员工拥有两个导航集合,但是在我看来是一个需求的问题上工作。如果它简化了问题,我可以删除这些问题。
我收到此消息。 System.Data.Entity.Edm.EdmAssociationEnd :: Multiplicity在关系'Employee_RequestsForEmployee'的关系'Employee_RequestsForEmployee_Target'中无效。因为“依赖角色”属性不是关键属性,所以“依赖角色”的多重性的上界必须为“*”。
我已经尝试过在上下文的OnModelCreation方法中使用Fluent API;
modelBuilder.Entity() .HasRequired(U => u.ForEmployee) .WithMany() .HasForeignKey(U => u.ForEmployeeId);
modelBuilder.Entity<RevenueTransferRequest>() .HasRequired(u => u.FromEmployee) .WithMany() .HasForeignKey(u => u.FromEmployeeId);
在冲突中的类(我已经删除了清晰一些性质);
public class Employee : IEmployee
{
[Key]
public string Id { get; set; }
[InverseProperty("ForEmployee")]
public ICollection<RevenueTransferRequest> RequestsForEmployee { get; set; }
[InverseProperty("FromEmployee")]
public ICollection<RevenueTransferRequest> RequestsFromEmployee { get; set; }
}
public class RevenueTransferRequest : IRevenueTransferRequest
{
[Key]
public Guid Id { get; set; }
[Required]
[ForeignKey("ForEmployee")]
public String ForEmployeeId { get; set; }
[InverseProperty("RequestsForEmployee")]
public Employee ForEmployee { get; set; }
[Required]
[ForeignKey("FromEmployee")]
public String FromEmployeeId { get; set; }
[InverseProperty("RequestsFromEmployee")]
public Employee FromEmployee { get; set; }
}
任何帮助将不胜感激。提前致谢。
有趣的问题。从'Employee'派生一个'RevenueTransferRequestFromEmployee'会不会过分?在这里大声思索...只需指出,如果它位于名为'[typename] Id'或'Id'的属性的顶部,则不需要'[Key]'属性,因为实体框架通过找到关键字*约定优于配置*。 – 2013-02-14 03:01:54
最后,我删除了所有InverseProperty和ForiegnKey定义,并将集合从Employee表中取出。它的工作原理和钥匙在那里。这让我在这个项目上前进。我将在业余时间继续研究这个问题,当我找到答案时我会回来找解决方案。 – 2013-02-15 15:43:12