如何使用实体框架CTP4 POCO注释与现有数据库映射外键

时间:2010-08-05 19:47:28

标签: entity-framework-4

我有一个现有的DB,在两个表之间有一个非常简单的单向外键关系。我需要使用可与现有数据库一起使用的映射创建类。

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

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

我为每个表定义了一个类。我想使用注释(或者如果必须的话,还是流畅的api) 将外键OfflinePackageDocument.PackageID映射到OfflinePackage.PackageID

我正在尝试使用RelatedTo注释:

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 个答案:

答案 0 :(得分: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

    ....
}