У меня есть 2 объекта с отношением FK между ними. Вся эта логика отлично работала, когда я использовал .net core 2, но сломалась, когда я обновился до 2.1.
public class Parent
{
[Key()]
public Guid ParentGUID {get;set;}
public string SomeValue {get;set;}
[ForeignKey("ReferenceTypeGUID")]
public ReferenceType ReferenceTypeObject {get;set;}
}
public class ReferenceType
{
[Key()]
public Guid ReferenceTypeGUID{get;set;}
public string SomeOtherValue {get;set;}
public virtual ICollection<Parent> ParentGU { get; set; }
}
а затем в моем dbcontext у меня есть
modelBuilder.Entity<ReferenceType>(entity =>
{
entity.HasKey(e => e.ReferenceTypeGUID);
entity.HasMany(c => c.ParentGU)
.WithOne(e => e.ReferenceTypeObject)
.HasForeignKey(f => f.ParentGUID)
.OnDelete(DeleteBehavior.ClientSetNull);
});
Теперь в моем исходном коде у меня не было строки HasForeignKey, и я получил следующую ошибку:
невозможно настроить таргетинг на первичный ключ, потому что он несовместим
добавление этой строки устранило эту проблему, но теперь я получаю
Конфликт типов операндов: int несовместим с uniqueidentifier
по какой-то причине EF предполагает, что тип базы данных должен быть int, а не uniqueidentifier, даже если объект объявлен как GUID. как мне исправить эту проблему?
ParentGUID
не может использоваться как FK для отношений «многие к одному», поэтому сохраните исходный код и исходную проблему с обновлением. - person Ivan Stoev   schedule 04.06.2018.HasForeignKey
). Попробуйте воспроизвести его в чистом проекте и дайте нам знать, или проверьте код, не показанный здесь, на предмет других причин. - person Ivan Stoev   schedule 04.06.2018Parent
, которое содержит ссылку на внешний ключ. Ваш родительский класс должен иметь свойствоpublic Guid ReferenceTypeGUID { get; set; }
. Я думаю, вы обнаружите, что атрибут[ForeignKey]
ожидает найти объявленное имя свойства в том же классе. - person Brad   schedule 05.06.2018