У меня есть следующий объект json, где я пытаюсь сохранить их в двух разных таблицах в sqlite. Вот сценарий, я сначала загружаю набор учеников и проверяю базу данных, и все выглядит великолепно.Реляционная база данных OneToMany
Однако, когда я получаю еще один набор учеников для вставки в существующие таблицы. несколько StudentId
получает NULL для первого набора наборов данных, но последний набор StudentId
набора данных является правильным.
Подробнее у вас есть такие же studentId
в таблице StudentSpecifications
. Если второй набор данных, который будет вставлен, имеет то же самое значение StudentId
, это влияет на первый набор данных и делает их NULL
, но второй набор данных StudentId
является правильным.
StudentId используется как ForeignKey
. Я подозреваю, что я использую отношения OnetoMany
, но я не знаю, как обращаться?
Student: [
{
StudentId: "3322449c-cd89-4633-ae3a-4578572eeeee",
Name: "Joseph Peter",
Qualification: "1222449c-efds-rfcs-asde-8546242kkkkk",
StudentSpecifications: [
{
Id: "45e63840-0dc3-4296-a83d-97cc462b2dac",
EnrollDate: "2016-08-05T09:40:21.233",
GraduationDate: "2017-06-05T09:40:21.233",
},
{
Id: "25fffe40-0dc3-4296-a83d-97cc462b2dac",
EnrollDate: "2015-07-05T09:40:21.233",
GraduationDate: "2016-08-05T09:40:21.233",
},
}
]
Student.cs
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<StudentSpecification> StudentSpecifications { get; set; }
public Student(StudentDto dto)
{
Id = dto.StudentId.ToString();
Name = dto.Name;
QualificationId = dto.QualificationId.ToString();
StudentSpecifications= dto.StudentSpecification.Select(x => new StudentSpecification(x, Id)).ToList();
}
StudentSpecification.cs
[Table("STUDENT_SPECIFICATIONS")]
public class StudentSpecification
{
[PrimaryKey]
public string Id{get;set;}
[ForeignKey(typeof(Student))]
public string StudentId { get; set; }
public DateTime EnrollDate{ get; set; }
public DateTime GraduationDate{ get; set; }
public StudentSpecification(StudentDto dto, string studentId)
{
Id = Guid.NewGuid().ToString();
StudentId = studentId;
EnrollDate= dto.EnrollDate;
GraduationDate= dto.GraduationDate;
}
Вставка в таблицу
public bool AddOrUpdate(IEnumerable<T> entities, bool withChildren = false)
{
var db = _factory.GetConnectionWithLock();
using (db.Lock())
{
db.InsertOrReplaceAllWithChildren(entities, true);
return true;
}
}
Вы можете написать код для 'Student.cs'? Это кажется неполным, и вы не можете комментировать класс OneToMany. – redent84
@ redent84, вы правы, это моя ошибка. Я добавил недостающую часть. – hotspring