Я пытаюсь вставить данные в базу данных, используя хранимую процедуру и Entity Framework с подходом, основанным на базе данных.
Я использую ASP. NET MVC для выполнения операций.
Ниже мой класс модели. Здесь я использую таблицу страны, пола и состояния, которая была FK для моей таблицы Employee
.
[MetadataType(typeof(EmployeeMetadata))]
public partial class Employee
{
}
public class EmployeeMetadata
{
public int ID { get; set; }
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
public string LastName { get; set; }
public Nullable<int> Gender { get; set; }
public Nullable<int> Salary { get; set; }
public string Designation { get; set; }
[Display(Name = "Company Name")]
public string Cmpname { get; set; }
[Display(Name = "Department Name")]
public string Dep_type { get; set; }
public Nullable<int> CountryId { get; set; }
public Nullable<int> Stateid { get; set; }
[ForeignKey("Gender")]
public virtual tblGender tblGender { get; set; }
[ForeignKey("CountryId")]
public virtual tblcountry tblcountry { get; set; }
[ForeignKey("Stateid")]
public virtual tblstate tblstate { get; set; }
}
[MetadataType(typeof(tblGenderMetadata))]
public partial class tblGender
{
}
public class tblGenderMetadata
{
public int Genid { get; set; }
[Display(Name = "Gender")]
public string GenderName { get; set; }
}
[MetadataType(typeof(tblcountryMetadata))]
public partial class tblcountry
{
}
public class tblcountryMetadata
{
public int CId { get; set; }
[Display(Name = "Country Name")]
public string C_Name { get; set; }
}
[MetadataType(typeof(tblstateMetadata))]
public partial class tblstate
{
}
public class tblstateMetadata
{
public int sId { get; set; }
[Display(Name = "State Name")]
public string state_name { get; set; }
public Nullable<int> country_code { get; set; }
}
Но когда я пытаюсь выполнить хранимую процедуру вставки, приложение показывает мне эту ошибку:
Оператор INSERT конфликтовал с ограничением FOREIGN KEY "FK_CountryId". Конфликт произошел в базе данных «EmployeeDB», таблице «dbo.tblcountry», столбце «CId». Оператор был прерван.
Это моя хранимая процедура:
ALTER PROCEDURE [dbo].[ProCRUD_EmpDB]
@ID int = NULL,
@FirstName nvarchar(50) = NULL,
@LastName nvarchar(50) = NULL,
@Gender int = NULL,
@Salary int = NULL,
@CountryId int = NULL,
@Stateid int = NULL,
@Designation varchar(50) = NULL,
@Cmpname varchar(20) = NULL,
@Dep_type varchar(15) = NULL,
@Flag varchar(15)
AS
BEGIN
IF @Flag = 'Select'
BEGIN
SELECT
ID, FirstName, [LastName],
Gender,
CountryId, Stateid,
[Salary],
Designation,
ISNULL ([Cmpname], 'N/A') AS [Cmpname],
ISNULL ([Dep_type], 'N/A') AS [Dep_type]
FROM
Employees
WHERE
id = @id
END
IF @Flag = 'SelectAll'
BEGIN
SELECT
ID, FirstName, [LastName],
Gender, GenderName,
CountryId, Stateid, C.Name, s.state_name,
[Salary],
Designation,
ISNULL ([Cmpname], 'N/A') AS [Cmpname],
ISNULL ([Dep_type], 'N/A') AS [Dep_type]
FROM
Employees
LEFT JOIN
tblGender g ON Employees.Gender = g.Genid
LEFT JOIN
tblcountry c ON Employees.CountryId = c.CId
LEFT JOIN
tblstate s ON Employees.Stateid = s.sId
END
IF @Flag = 'Delete'
BEGIN
DELETE FROM Employees
WHERE ID = @id
END
IF @Flag = 'Gender'
BEGIN
SELECT * FROM tblGender
END
IF @Flag = 'Country'
BEGIN
SELECT * FROM tblcountry
END
IF @Flag = 'State'
BEGIN
SELECT *
FROM tblstate
WHERE country_code = @CountryId
END
IF @Flag = 'Insert'
BEGIN
INSERT INTO [dbo].[Employees] ([FirstName], [LastName], [Gender], Designation,
[Salary], [Cmpname],[Dep_type],
CountryId, Stateid)
VALUES (@FirstName, @LastName, @Gender, @Designation,
@Salary, @Cmpname, @Dep_type, @CountryId, @Stateid)
END
IF @Flag = 'Update'
BEGIN
UPDATE [dbo].[Employees]
SET [FirstName] = @FirstName,
[LastName] = @LastName,
[Gender] = @Gender,
[Salary] = @Salary,
[Cmpname] = @Cmpname,
Designation = @Designation,
[Dep_type] = @Dep_type,
CountryId = @CountryId,
Stateid = @Stateid
WHERE
ID = @id
END
END
Кроме того, я попытался добавить внешний ключ в виртуальную таблицу, пока еще показывает мне выше ошибка.