实体框架-数据库第一个外键表不会显示为模型

时间:2018-07-19 08:42:13

标签: c# entity-framework linq edmx

我创建了一个包含两个主键和两个外键的表,两个外键都引用基表中的同一列-脚本如下:

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中的外键约束有什么解决方案吗?

0 个答案:

没有答案