Entity Framework - таблица первого внешнего ключа БД не будет отображаться как модель
Я создал таблицу с двумя первичными ключами и двумя внешними ключами, причем оба внешних ключа ссылаются на один и тот же столбец в базовой таблице - скрипт следующим образом:
CREATE TABLE [dbo].[TG_PitzulHafrashotShliliVsShotef](
[PitzulHafrashotIdShlili] [int] NOT NULL,
[PitzulHafrashotIdShotef] [int] NOT NULL,
[TaarichIdkun] [datetime2](7) NULL,
PRIMARY KEY CLUSTERED
(
[PitzulHafrashotIdShlili] ASC,
[PitzulHafrashotIdShotef] 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
ALTER TABLE [dbo].[TG_PitzulHafrashotShliliVsShotef] WITH CHECK ADD CONSTRAINT [FK_TG_PitzulHafrashotShliliVsShotef_TG_PitzulHafrashot] FOREIGN KEY([PitzulHafrashotIdShlili])
REFERENCES [dbo].[TG_PitzulHafrashot] ([Id])
GO
ALTER TABLE [dbo].[TG_PitzulHafrashotShliliVsShotef] CHECK CONSTRAINT [FK_TG_PitzulHafrashotShliliVsShotef_TG_PitzulHafrashot]
GO
ALTER TABLE [dbo].[TG_PitzulHafrashotShliliVsShotef] WITH CHECK ADD CONSTRAINT [FK_TG_PitzulHafrashotShliliVsShotef_TG_PitzulHafrashot1] FOREIGN KEY([PitzulHafrashotIdShotef])
REFERENCES [dbo].[TG_PitzulHafrashot] ([Id])
GO
ALTER TABLE [dbo].[TG_PitzulHafrashotShliliVsShotef] CHECK CONSTRAINT [FK_TG_PitzulHafrashotShliliVsShotef_TG_PitzulHafrashot1]
GO
Затем я пошел к своему коду и обновил свою модель из БД, добавил новую таблицу и ожидал увидеть новую сгенерированную модель новой таблицы.
Однако новая модель не генерировалась, и моя базовая модель выглядела так:
public partial class TG_PitzulHafrashot
{
public TG_PitzulHafrashot()
{
this.TG_PitzulHafrashot1 = new HashSet<TG_PitzulHafrashot>();
this.TG_PitzulHafrashot2 = new HashSet<TG_PitzulHafrashot>();
}
/* unrelated properties
*/
public virtual ICollection<TG_PitzulHafrashot> TG_PitzulHafrashot1 { get; set; }
public virtual ICollection<TG_PitzulHafrashot> TG_PitzulHafrashot2{ get; set; }
}
Затем я удалил ограничение FK из новой таблицы и снова обновил модель. После я обновил модель. Теперь новый класс был сгенерирован, как и ожидалось, без ограничений на базовую модель:
public partial class TG_PitzulHafrashotShliliVsShotef
{
public int PitzulHafrashotIdShlili { get; set; }
public int PitzulHafrashotIdShotef { get; set; }
public Nullable<System.DateTime> TaarichIdkun { get; set; }
public virtual TG_PitzulHafrashot TG_PitzulHafrashot { get; set; }
public virtual TG_PitzulHafrashot TG_PitzulHafrashot1 { get; set; }
}
Затем я добавил ограничение FK в новую таблицу и еще раз обновил модель - теперь отношения созданы очень хорошо:
public TG_PitzulHafrashot()
{
this.TG_PitzulHafrashotShliliVsShotef = new HashSet<TG_PitzulHafrashotShliliVsShotef>();
this.TG_PitzulHafrashotShliliVsShotef1 = new HashSet<TG_PitzulHafrashotShliliVsShotef>();
}
/* unrelated properties
*/
public virtual ICollection<TG_PitzulHafrashotShliliVsShotef> TG_PitzulHafrashotShliliVsShotef { get; set; }
public virtual ICollection<TG_PitzulHafrashotShliliVsShotef> TG_PitzulHafrashotShliliVsShotef1 { get; set; }
}
Мой вопрос заключается в том, разве структура сущности не так, как правильно генерировать модель с внешними ключами?
это была очень странная ситуация, так как новая таблица была добавлена к SqlServer.edmx
Однако файл не был показан в конструкторе, и соответствующие модели никогда не создавались, только после того, как я создал таблицу без ограничений.
Есть ли какое-нибудь решение для ограничения внешнего ключа в EF db первым?