2014-08-28 105 views
0

我无法定义以下DB结构,使用导航属性:EF代码首先定义FK正确(1/0至1/0)

Table: Batch 
    PK: Id 
    FK: Model_ID (can be also null) 

    Table: Model 
    PK: Id 
    no FKs related to Batch 

所以这有点像1/0至1/0的关系。 Model & Batch可以不知道对方存在。请注意,我只需要'批'而不是'模型'中需要FK列。在'模型'中,我只想获取相关Batch(如果存在)。但有些型号和一些批次是相互连接的。

我定义了下面,却是

public class BaseData { 
    public Guid Id {get; set; }  
    public Guid? ModelId {get; set; } 
    public ModelData ModelId { get; set; } 
} 

public class ModelData { 
    public Guid Id {get; set; } 
    public Guid? BatchId { get; set; } 
    public BatchData Batch { get; set; } 
} 

我能够确定正确的数据库结构,如果我删除一个导航属性 - 从ModelData BatchData Batch。 但是,我希望在这两个类中都有导航属性,这有可能吗?

我试过不同的配置,都不起作用。 一个例子我试着:

ModalConfig:

HasOptional(X => x.Batch) .WithRequired(X => x.Model);

BatchConfig:

HasOptional(x => x.Model) 
      .WithOptionalPrincipal(); 

这并不在DB创建FKS。

回答

0

依赖PK ID也是FK ID。

public class BatchData { 
    [ForeignKey("Model")] 
    public Guid Id {get; set; }  
    // public Guid? ModelId {get; set; } 
    // public ModelData ModelId { get; set; } 
    public ModelData Model { get; set; } 
} 

委托人在模型中不能有FK ID。

public class ModelData { 
    public Guid Id {get; set; } 
    // public Guid? BatchId { get; set; } 
    public BatchData Batch { get; set; } 
} 

这将工作没有流利的API配置。