我正在使用實體框架核心1或「7.0.0-rc1-final」。我試圖做一個實體自我引用,但它不工作。按照exemplo:實體框架映射自引用
public class Unidade
{
[Key]
public Int32 IdUnidade { get; set; }
public Int32? IdUnidadePai { get; set; }
public String Nome { get; set; }
public ICollection<Unidade> LstFilhos { get; set; }
public Unidade UnidadePai { get; set; }
}
按照映射:
public UnidadeConfiguration(EntityTypeBuilder<Unidade> paramModelBuilder)
{
paramModelBuilder.HasKey(x => x.IdUnidade);
paramModelBuilder.HasMany(x => x.LstFilhos)
.WithOne(x => x.UnidadePai)
.HasForeignKey(c => c.IdUnidadePai);
paramModelBuilder.ToTable("Unidade","Unidade");
}
我已經嘗試使用此方法:
paramModelBuilder.HasOne(x => x.UnidadePai)
.WithMany(x => x.LstFilhos)
.HasForeignKey(x => x.IdUnidade);
並嘗試這:
paramModelBuilder.HasMany(x => x.LstFilhos)
.WithOne(x => x.UnidadePai)
.HasForeignKey("IdUnidade", "IdUnidadePai");
我的數據庫sql:
CREATE TABLE [Unidade].[Unidade](
[IdUnidade] [int] IDENTITY(1,1) NOT NULL,
[IdUnidadePai] [int] NULL,
[Nome] [varchar](100) NOT NULL,
CONSTRAINT [PK_Unidade] PRIMARY KEY CLUSTERED
(
[IdUnidade] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING ON
GO
ALTER TABLE [Unidade].[Unidade] WITH CHECK ADD CONSTRAINT [FK_Unidade_Unidade]
FOREIGN KEY([IdUnidadePai])
REFERENCES [Unidade].[Unidade] ([IdUnidade])
GO
ALTER TABLE [Unidade].[Unidade] CHECK CONSTRAINT [FK_Unidade_Unidade]
GO
所以,當我試圖讓一個元素的元素,我有一些場景:
- 我得到永恆的循環中,總是由一個像往常一樣搜索通過ID 1
- 我什麼也沒得到
- 我收到一個異常,帶有mensage「附加信息:無效的列名稱'IdUnidade1'。 。
我真的不知道我做什麼
您是否嘗試過使用腳手架命令生成代碼的第一個類和映射,或者它們是手動編寫的? –