2012-11-14 71 views
0

我有以下几点:实体框架代码优先:一对一的关系不产生外键

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和文档之间的关系的外键,很我在这里错过了什么,或者这是预期的行为?

我也尝试在两个类上创建AnalysisFileId和DocumentId属性,但是当我这样做时,它们不会使用任何ID填充。

另一个问题也是:我如何确保Document对AnalysisFile进行级联删除?

回答

2

与实体框架的一对一关系是Shared Primary Key Associations。除主键以外,它们没有单独的外键列,因为Document中的主键同时是AnalysisFile的外键。 (你可以看到,当您检查在数据库中创建的关系应该在AnalysisFile与主键Id涉及外键IdDocument。)

您可以启用级联删除,像这样:

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

我确实想知道共享主键,非常感谢:-) – Mantorok

相关问题