实体框架代码优先:不生成外键的一对一关系

时间:2012-11-14 14:25:33

标签: ef-code-first sql-server-ce entity-framework-5

我有以下内容:

   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进行级联删除?

1 个答案:

答案 0 :(得分:2)

与实体框架的一对一关系是Shared Primary Key Associations。除了主键之外,它们没有单独的外键列,因为Document中的主键同时是AnalysisFile的外键。 (您可以在检查数据库中创建的关系时看到它。它应该将Id中的外键DocumentId中的主键AnalysisFile相关联。)< / p>

您可以启用级联删除,如下所示:

modelBuilder.Entity<Document>()
    .HasRequired(x => x.AnalysisFile)
    .WithOptional(x => x.Document)
    .WillCascadeOnDelete(true);