2

我正在尝试创建一个可以选择引用同一类型的父级的模型,例如:

public class Category
{
    public virtual long CategoryID { get; set; }

    public virtual Category? ParentCategory { get; set; }

    public virtual int UserID { get; set; }
    public virtual string Name { get; set; }

}

如您所见,有一个名为 ParentCategory 的可选成员是可选的,它引用 Category 类型的类(即相同类型)。我相信您可以猜到,我正在尝试创建一个简单的类别树,其中根节点将没有父节点。

当 Entity Framework 尝试创建数据库时,这会导致以下错误:

“类型‘MyProject.Models.Category’上的属性‘ParentCategoryID’上的 ForeignKeyAttribute 无效。在依赖类型‘MyProject.Models.Category’上找不到导航属性‘Category’。名称值应该是有效的导航属性名称。”

我也试过这个:

public class Category
{
    public virtual long CategoryID { get; set; }

    [ForeignKey("Category")]
    public virtual long? ParentCategoryID { get; set; }

    public virtual int UserID { get; set; }
    public virtual string Name { get; set; }

}

但这又导致了同样的错误。

是否可以使用 EF Code First 对此进行建模?如果我要手动创建数据库,很容易在数据库中建模。

在此先感谢本

4

1 回答 1

2

您的第一个示例甚至无法编译,因为T?的快捷方式Nullable<T>只能应用于值类型。

以下工作正常:

public class Category
{
    public virtual long CategoryID { get; set; }
    public virtual Category ParentCategory { get; set; }
}

现在,这将默认为 FK 使用丑陋的名称,ParentCategory_CategoryID.

这是一种获得更好名称的方法,并且在使用时具有一定的灵活性:

public class Category
{
    public virtual long CategoryID { get; set; }
    [ForeignKey("ParentCategoryID")]
    public virtual Category ParentCategory { get; set; }
    public virtual long? ParentCategoryID { get; set; }
}
于 2012-05-28T17:28:43.617 回答