Оператор INSERT конфликтует с ограничением FOREIGN KEY SAME TABLE | ASP. NET Core & Entity Framework Core Code First - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть таблица с именем Компания

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Companies](
    [Id] [uniqueidentifier] NOT NULL,
    [ActiveStatus] [nvarchar](max) NULL,
    [Name] [nvarchar](max) NULL,
    [Address] [nvarchar](max) NULL,
    [Phone1] [nvarchar](max) NULL,
    [Phone2] [nvarchar](max) NULL,
    [Email] [nvarchar](max) NULL,
    [CompanyId] [uniqueidentifier] NOT NULL,
    [IsParent] [nvarchar](max) NULL,
 CONSTRAINT [PK_Companies] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
ALTER TABLE [dbo].[Companies]  WITH CHECK ADD  CONSTRAINT [FK_Companies_Companies_CompanyId] FOREIGN KEY([CompanyId])
REFERENCES [dbo].[Companies] ([Id])
GO
ALTER TABLE [dbo].[Companies] CHECK CONSTRAINT [FK_Companies_Companies_CompanyId]
GO

Сначала я сделал это, используя код ASP.NET Core, это мой класс

public class BaseClass
    {
        [Key]
        public Guid Id { get; set; }

        public string ActiveStatus { get; set; }
    }

public class Company: BaseClass
    {
        public string Name { get; set; }

        public string Address { get; set; }

        public string Phone1 { get; set; }

        public string Phone2 { get; set; }

        public string Email { get; set; }

        [ForeignKey("Company")]
        public Guid CompanyId { get; set; }
        public Company ParentCompany { get; set; }

        public string IsParent { get; set; }

        public ICollection<Company> ParentCompanies { get; set; }
        public ICollection<Activity> Activities { get; set; }
        public ICollection<Order> Orders { get; set; }
        public ICollection<Ticket> Tickets { get; set; }
        public ICollection<User> Users { get; set; }
    }

Я хочу вставить данные в мою таблицу с помощью запроса

INSERT [dbo].[Companies] ([Id], [ActiveStatus], [Name], [Address], [Phone1], [Phone2], [Email], [CompanyId], [IsParent]) VALUES (N'af85a23c-3832-47c9-3efe-08d79f1b5659', N'Active', N'PT. Sari Coffee Indonesia', N'Sahid Sudirman Center 27th Floor, Jl. Jend. Sudirman No.Kav. 86, RT.10/RW.11, Karet Tengsin, Kota Jakarta Pusat, Daerah Khusus Ibukota Jakarta 10220', N'+62 21 574 6501', N'+62 21 574 5808', N'feedback@starbucks.co.id', N'00000000-0000-0000-0000-000000000000', N'1')
GO

Но я получил ошибку:

Сообщение 547, уровень 16, состояние 0, строка 3 Оператор INSERT конфликтовал с FOREIGN Ключевое то же самое ограничение таблицы "FK_Companies_Companies_CompanyId". Конфликт произошел в базе данных "CRMandOMS", таблица "dbo.Companies", столбец 'Id'. Заявление было прекращено.

Пожалуйста, помогите

1 Ответ

0 голосов
/ 07 февраля 2020

Вы хотите добавить 00000000-0000-0000-0000-000000000000 как CompanyId, поэтому вы столкнулись с этой ошибкой, потому что в вашей таблице нет компании с этим Id.

В вашем сценарии есть возможность иметь компанию с не родителем, поэтому ваш дизайн таблицы неправильный. для устранения этой ошибки вам нужно сделать CompanyId внешний ключ nullable.

сделать, как показано ниже:

...

[ForeignKey("Company")]
public Guid? CompanyId { get; set; }

...

Затем Add-Migration и Update-Database для изменения базы данных. Теперь вы можете вставить компанию с Null родителем.

удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...