我有一个现有的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中的一个属性。
我无法弄清楚我在这里做错了什么。
答案 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
....
}