2012-11-01 122 views
0

我正在努力獲得正確工作的特定代碼優先關係。基本上我有以下類:實體框架代碼第一關係問題

public class Service 
{ 
    public Guid ServiceId { get; set; } 

    public virtual List<ServicePackageService> ServicePackageServices { get; set; } 
} 

public class ServicePackageService 
{ 
    public Guid ServicePackageServiceId { get; set; } 

    public Guid ServiceId { get; set; } 
    public virtual Service Service { get; set; } 

    public Guid PackageServiceId { get; set; } 
    public virtual Service PackageService { get; set; } 
} 

的這裏的想法是,服務對象可以有多個ServicePackageService對象。這些PackageServiceObjects與單個服務相關,但它們有一個PackageService屬性,它是與Service表的另一個關係。

在我的配置我使用了以下內容:

public ServicePackageServiceConfiguration() 
    { 
     HasRequired(x => x.Service); 
     HasRequired(x => x.PackageService).WithMany().HasForeignKey(a => a.PackageServiceId).WillCascadeOnDelete(false); 
    } 

但導致如下的數據表:

ServicePackageServiceId (PK) 
    ServiceId (No foreign key appears on this column) 
    PackageServiceId (FK) 
    Service_ServiceId (FK) 

任何人都可以點我在正確的方向上如何配置這種關係。

回答

0

這一切都歸結於配置錯誤。

來處理這種關係的正確方法是指定下列服務配置:

HasMany(x => x.ServicePackageServices) 
    .WithRequired(b => b.Service) 
    .HasForeignKey(m => m.ServiceId); 

隨着對反向關係的ServicePackageService配置:

HasRequired(x => x.PackageService) 
    .WithMany() 
    .HasForeignKey(a => a.PackageServiceId).WillCascadeOnDelete(false); 
+0

嗨,移動編輯你的答案。你介意將它標記爲已接受嗎? –

+0

會做什麼,明天只能標記爲已答覆。 – Gary