我有以下内容:
public abstract class EntityBase
{
[Key]
public int Id { get; set; }
public DateTime? CreatedTime { get; set; }
public DateTime? ModifiedTime { get; set; }
}
public class AnalysisFile : EntityBase
{
public AnalysisFile()
{
DateAdded = DateTime.Now;
}
public string SourceFolder { get; set; }
public string Filename { get; set; }
public DateTime DateAdded { get; set; }
public long FileSize { get; set; }
public Document Document { get; set; }
}
public class Document : EntityBase
{
public Document()
{
Publish = true;
}
public string Name { get; set; }
public int AreaId { get; set; }
public int SchoolId { get; set; }
public int Year { get; set; }
public long FileSize { get; set; }
public AnalysisFile AnalysisFile { get; set; }
public School School { get; set; }
public Area Area { get; set; }
public bool Publish { get; set; }
}
modelBuilder.Entity<Document>().HasRequired(x => x.AnalysisFile);
modelBuilder.Entity<AnalysisFile>().HasOptional(x => x.Document);
我的问题是,EF似乎没有为AnalysisFile和Document之间的关系创建外键,我在这里遗漏了什么,或者这是预期的行为?
我也尝试在两个类上创建AnalysisFileId和DocumentId属性,但是当我这样做时,他们不会填充任何ID。
另一个问题是:如何确保Document对AnalysisFile进行级联删除?
答案 0 :(得分:2)
与实体框架的一对一关系是Shared Primary Key Associations。除了主键之外,它们没有单独的外键列,因为Document
中的主键同时是AnalysisFile
的外键。 (您可以在检查数据库中创建的关系时看到它。它应该将Id
中的外键Document
与Id
中的主键AnalysisFile
相关联。)< / p>
您可以启用级联删除,如下所示:
modelBuilder.Entity<Document>()
.HasRequired(x => x.AnalysisFile)
.WithOptional(x => x.Document)
.WillCascadeOnDelete(true);