我有以下表格:
人(字符串socialNumber ,字符串名称)
快照( int snapshotId ,日期时间日期
InfoOverTime( int snapshotId,string socialNumber ,string desc,...)
粗体列应为snapshotId
的主键,socialNumber
InfoOverTime
也是外键。
我尝试在代码中首先创建此配置,如下所示:
public class Person
{
public Person()
{
}
[Key]
public string SocialNumber { get; set; }
public string Name { get; set; }
public InfoOverTime InfoOverTime { get; set; }
}
public class Snapshot
{
public Snapshot()
{
}
public int SnapshotId { get; set; }
public DateTime Date { get; set; }
}
public class InfoOverTime
{
public InfoOverTime()
{
}
[Key, Column(Order = 0), ForeignKey("Snapshot")]
public int SnapshotId { get; set; }
public Snapshot Snapshot { get; set; }
[Key, Column(Order = 1), ForeignKey("Person")]
public string PersonId { get; set; }
public Person Person{ get; set; }
public string Desc { get; set; }
...
}
不幸的是,我收到以下错误消息:
EntityFramework.dll中出现未处理的“System.Data.Entity.ModelConfiguration.ModelValidationException”类型异常
其他信息:在模型生成期间检测到一个或多个验证错误:
InfoOverTime_Person_Source :: Multiplicity在关系'InfoOverTime_Person'中的角色'InfoOverTime_Person_Source'中无效。由于Dependent Role属性不是关键属性,因此Dependent Role的多重性的上限必须为'*'。
我也试图通过EntityTypeConfiguration
这样做:
public class InfoOverTimeMap : EntityTypeConfiguration<InfoOverTime>
{
public InfoOverTimeMap()
{
this.HasKey(pc => new {pc.SnapshotId, pc.PersonId});
this.HasRequired(x => x.Snapshot).WithMany().HasForeignKey(x => x.SnapshotId);
this.HasRequired(x => x.Person).WithMany().HasForeignKey(x => x.PersonId);
}
}
但这也不起作用: - (
我做错了什么?
提前致谢
答案 0 :(得分:0)
您错过了快照类中的以下内容:
public virtual InfoOverTime InfoOverTime { get; set; }
答案 1 :(得分:0)
除了其他人的评论和回答之外,您可能还错过了快照的“关键”属性
[Key]
public int SnapshotId { get; set; }
答案 2 :(得分:0)
您需要删除public InfoOverTime InfoOverTime { get; set; }
。此外,如果您在virtual
中使用Person
关键字与Snapshot
和InfoOverTime
,则EF可以映射相关的Person
和Snapshot
。
代码应该如下:
public class Person
{
public Person()
{
}
[Key]
public string SocialNumber { get; set; }
public string Name { get; set; }
}
public class Snapshot
{
public Snapshot()
{
}
public int SnapshotId { get; set; }
public DateTime Date { get; set; }
}
public class InfoOverTime
{
public InfoOverTime()
{
}
[Key, Column(Order = 0), ForeignKey("Snapshot")]
public int SnapshotId { get; set; }
public virtual Snapshot Snapshot { get; set; }
[Key, Column(Order = 1), ForeignKey("Person")]
public string PersonId { get; set; }
public virtual Person Person{ get; set; }
public string Desc { get; set; }
}