我正在使用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 并创建多对多关系(这有点过分但是......)
答案 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类。