Я уже около 4 часов пытался выяснить, что я делаю неправильно с этой иерархией TPT, это была большая боль в шее.Entity Framework сбрасывает значения int до 0 на унаследованный объект
У меня есть базовый класс:
public partial class Registry
{
public int Id_Audit{get;set;}
public string CUD{get;set;} //Key Value
public bool Canceled{get;set;}
public virtual ICollection<Articles> Articles {get;set;}
public virtual ICollection<Paid> Paids {get;set;}
//Other base properties
}
public partial class Sale : Registry
{
public int idsale{get;set;}
}
public partial class Cuote : Registry
{
public int idCuote{get;set;}
public int Consec{get;set;}
public int Modification{get;set;}
//Other Cuote properties
}
Во время выполнения взаимодействует с Registry
объектом до тех пор, пока не решен, какой объект будет будет: Sale
или Cuote
, так что я сделал класс расширения экспорта базового класса производным класс
public partial class Registry
{
public Sales ToSale()
{
Sale r = new Sale
{
Canceled = this.Canceled,
CUD = this.CUD,
Id_Auditoria = this.Id_Auditoria,
//other properties
};
return r;
}
}
Такая же функция была сделана для cuotes.
Поэтому я использую его как этот
Sale s = tempRegistry.ToSale();
dbContext.Registrys.Add(s);
dbContext.SaveChanges();
Но каждый раз, SaveChanges()
бросает исключение:
Вкладыше о противоречии с ограничением внешнего ключа "FK_Registrys_Audits". Конфликт произошел в базе данных «testDB», таблице «dbo.Audits», в столбце «Id». Заявление было прекращено.
Но объект установлен до SaveChanges()
, но после SaveChanges()
его нет.
Вот заголовок (Имена немного разные, Id_Auditoria == Id_Audit
, Registros_Auditoria == Registry
):
уловом
Моя схема базы данных это: Как вы можете видеть, больше нет манипуляций для Sale
Объект Итак, почему он все время бросает мне это исключение?
может быть идентификатором null. null автоматически преобразуется в ноль в C#, если свойство не определено, чтобы разрешить нулевое значение. –
Откуда берется 'tempRegistry'? Связан ли он с контекстом и имеет ли он связанный объект Auditoria? –
@GertArnold 'tempRegistry' - это экземпляр класса« Registry »в моей основной форме, этот объект привязан к элементам управления, тогда пользователь решает, какой тип реестра будет, конкретные свойства будут установлены, а затем добавлены в контекст –