Manamohan Jha Ответов: 2

Получить ошибку значение внешнего ключа не может быть вставлено, так как соответствующее значение первичного ключа не существует. [ Имя ограничения внешнего ключа = ...]


Я пытаюсь создать внешний ключ в EF, но постоянно получаю сообщение об ошибке
"Значение внешнего ключа не может быть вставлено, поскольку соответствующее значение первичного ключа не существует."

Студент уже ссылается на AddressDetail, и я пытаюсь создать еще одного ссылочного сотрудника для AddressDetail..

public abstract class BaseEntity
    {        
        [Key]
        public int Id { get; set; }
        public DateTime? AddedDate { get; set; }
        public string AddedBy { get; set; }
        public DateTime? ModifiedDate { get; set; }
        public string ModifiedBy { get; set; }
    }

public class Student : BaseEntity
    {
        public string AppNo { get; set; }
        public string Name { get; set; }
        public virtual ICollection<addressdetail> AddressDetails { get; set; }
    }

public class Employe : BaseEntity
    {       
        public string Name { get; set; }
        public virtual ICollection<addressdetail> AddressDetails { get; set; }
    }

public class AddressDetail : BaseEntity
    {
        public int RefId { get; set; }
        public string Address { get; set; }
        public virtual Student Students { get; set; }
        public virtual Employe Employes { get; set; }
    }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<addressdetail>()
                .HasRequired(i => i.Student)
                .WithMany(a => a.AddressDetails)
                .HasForeignKey(f => f.RefId)
                .WillCascadeOnDelete(false);

           modelBuilder.Entity<addressdetail>()
                .HasRequired(i => i.Employe)
                .WithMany(a => a.AddressDetails)
                .HasForeignKey(f => f.RefId)
                .WillCascadeOnDelete(false);
    }


Что я уже пробовал:

использование (var ctx = new InstituteContext())
{
Студент Стю=новый студент
{
AppNo= " A001",
Имя= " Мохан",
AddressDetails = новый список & lt;addressdetail>
{
новый Адресдеталь
{
RefId= Id, / / получение первичного ключа студента из BaseEntity
Адрес = " Варанаси"
}
};
СТХ.Добавить(ГТУ);
СТХ.Сохранить();
}
}

Что я делаю не так?
Пожалуйста, помоги мне, гьес

Спасибо
Манмохан

The Praveen Singh

потому что вы вставили значение вашего внешнего ключа до того, как оно существует в таблице, в которой вы сделали первичный ключ.

2 Ответов

Рейтинг:
2

njammy

Вы пытаетесь вставить объект AddressDetail без связанного с ним объекта Employee. Это согласно вашему картографическому коду.
Либо создать сущность "сотрудник", а также, прежде чем вставить или исправить отображение.


Рейтинг:
0

Patrice T

Это проблема проектирования баз данных.

Цитата:
Я пытаюсь создать внешний ключ в EF, но постоянно получаю сообщение об ошибке
"Значение внешнего ключа не может быть вставлено, поскольку соответствующее значение первичного ключа не существует."

Студент уже ссылается на AddressDetail, и я пытаюсь создать еще одного ссылочного сотрудника для AddressDetail..

Ваша база данных была создана с ограничением, что AddressDetail foreign key value должен соответствовать student primary key value.
При попытке вставить AddressDetail с employe primary key value, вы нарушаете ограничение, потому что employe primary key value не совпадают ни с одним student primary key value.