2010-08-05 32 views
4

我有一個現有的數據庫與兩個表之間非常簡單的單向外鍵關係。我需要創建具有可與現有數據庫配合使用的映射的類。如何映射外鍵使用實體框架CTP4 POCO批註與現有數據庫

CREATE TABLE OfflinePackage (
     PackageID int, 
     Name nvarchar(100) 
     ... 

CREATE TABLE OfflinePackageDocument (
     PackageDocumentID int, 
     PackageID int, --- FK references OfflinePackage.PackageID 
     ... 

我爲這些表中的每一個定義了一個類。我想用註釋(或流暢API如果我要) 映射外鍵OfflinePackageDocument.PackageID到OfflinePackage.PackageID

我試圖使用註解願意與我們:

public class OfflinePackageDocument 
{ 
     [Key, StoreGenerated(StoreGeneratedPattern.Identity)] 
     public int PackageDocumentID { get; set; } 

     [RelatedTo(Property = "PackageID")] 
     public virtual OfflinePackage Package { get; set; } 

     ... 

} 

public class OfflinePackage 
{ 
    [Key, StoreGenerated(StoreGeneratedPattern.Identity)] 
    public int PackageID { get; set; } 

    ... 
} 

但我在ModelBuilder.CreateModel()期間獲取此錯誤:

無法在相關類型'OfflinePackage'上找到由RelatedToAttribute.Property值指定的導航屬性'PackageID'。

PackageID肯定是OfflinePackage中的一個屬性。

我不明白我在這裏做錯了什麼。

回答

1

我想出瞭如何使這項工作。

首先,OfflinePackageDocument類中必須有一個PackageID int屬性(它直接映射到表中的外鍵)。然後,您可以添加「虛擬OfflinePackage包」導航屬性,指示新添加的PackageID作爲外鍵。

public class OfflinePackageDocument 
{ 
    [Key, StoreGenerated(StoreGeneratedPattern.Identity)] 
    public int PackageDocumentID { get; set; } 

    public int PackageID { get; set; } // This must exist - maps directly to the DB field 

    [RelatedTo(ForeignKey = "PackageID")] 
    public virtual OfflinePackage Package { get; set; } // Now we can define this navigation property 

    .... 
} 
+0

謝謝,我只是在我的頭上敲了一下。我得到了多個外鍵上重複的列映射回同一個對象...例如CreatedBy,ModifiedBy映射回用戶對象每個給我2列。這固定了它 – 2010-09-05 20:07:31