2

我正在使用 Visual Studio Entity Framework 电动工具从我的数据库中生成 poco 类。它一直有效,直到我向表中添加了一个自引用键。

CREATE TABLE [dbo].[Item](
  [Id] [int] IDENTITY(1,1) NOT NULL,
  [Name] [nvarchar](100) NOT NULL,
  [parentItemId] [int] NULL,
...
ALTER TABLE [dbo].[Item] WITH CHECK ADD CONSTRAINT [FK_Item_Item] FOREIGN KEY([parentItemId])

现在我的项目类与以前相同(它不包含新的parentItemId字段):

public partial class Item
{
    public Item()
    {
    }

    public int Id { get; set; }
    public string Name { get; set; }
}

而且似乎电动工具根本无法在 dbContext 类中生成任何代码。

使用这种数据库结构是否超出了 EF 范围?

如果是这样,那么最好的解决方案是什么?我能想到的唯一一个是添加另一个表ItemItem并创建多对多关系(这有点矫枉过正但是......)

4

1 回答 1

1

我在那篇文章中找不到一些课程。我确实使用另一篇文章完成了这项工作。Item 类最终为:

public partial class Item
 ...
    public virtual int? ParentId { get; set; }
    public virtual Item Parent { get; set; }
    public virtual ICollection<Item> Children { get; set; }
}

需要的映射类:

this.HasOptional(x => x.Parent)
    .WithMany(x => x.Children)
    .HasForeignKey(x => x.ParentId)
    .WillCascadeOnDelete(false);

它似乎奏效了。我不需要任何 ProxyCreation 或 CreateObject 命令...最大的问题是我不能再使用 EF 电动工具来生成任何新的 Poco 类。

于 2013-08-08T19:34:22.967 回答