EF Power Tools被自我参照表困惑

时间:2013-08-08 17:30:48

标签: c# visual-studio-2010 entity-framework poco

我正在使用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])

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

public partial class Item
{
    public Item()
    {
    }

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

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

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

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

1 个答案:

答案 0 :(得分:1)

我找不到post中的某些类。我确实使用了另一个article。 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类。