请帮助找到错误。
错误文本:在模型生成期间检测到一个或多个验证错误。因为依赖角色中的所有属性都是非可空的,所以主要角色的多样性必须为1.
//File.cs
public class File
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Sp> Sps { get; set; }
}
//Sp.cs
public class Sp
{
public int Id { get; set; }
public int FileId { get; set; }
public File File { get; set; }
}
映射代码
//mapping File
class File : EntityTypeConfiguration<File>
{
public File()
{
ToTable("File", "dbo");
HasKey(x => x.Id);
Property(x => x.Id).HasColumnName("ID");
Property(x => x.Name).HasColumnName("NAME");
}
}
//mapping Sp
class Sp : EntityTypeConfiguration<Sp>
{
public Sp()
{
ToTable("Sp", "dbo");
HasKey(x => x.Id);
Property(x => x.Id).HasColumnName("ID");
Property(x => x.FileId).HasColumnName("FILE_ID");
//the location of the error
HasOptional(d => d.File)
.WithMany(d => d.Sps)
.HasForeingKey(d => d.FileId)
.WillCascadeOnDelete(false);
}
}
答案 0 :(得分:2)
你有一个可选的外键映射到一个非可空的属性是矛盾的,你需要采用这种方式。
将HasOptional
更改为HasRequired
,这意味着每个Sp
都必须有关联的File
。
class Sp : EntityTypeConfiguration<Sp>
{
public Sp()
{
ToTable("Sp", "dbo");
HasKey(x => x.Id);
Property(x => x.Id).HasColumnName("ID");
Property(x => x.FileId).HasColumnName("FILE_ID");
//the location of the error
HasRequired(d => d.File)
.WithMany(d => d.Sps)
.HasForeingKey(d => d.FileId)
.WillCascadeOnDelete(false);
}
}
如果这不是您想要的,那么请FileID
可以为空
public class Sp
{
public int Id { get; set; }
public int? FileId { get; set; }
public File File { get; set; }
}
这将允许您拥有Sp
个没有关联File
的记录。