我创建了一个包含两个主键和两个外键的表,两个外键都引用基表中的同一列-脚本如下:
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中的外键约束有什么解决方案吗?