2014-08-28 108 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配置。