Ключ в таблице становится Guid.Empty entityframework core - PullRequest
0 голосов
/ 17 июня 2020

У меня есть следующие сущности:

public class ElectedRepresentativeData : TimeTrackBase
{
    [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }

        public int CustomerNumber { get; set; }

        public int RegionId { get; set; }

        public bool Success { get; set; }
        public virtual Accountants Accountants { get; set; }
}

public class Accountants : TimeTrackBase
{
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        public Guid ElectedRepresentativeDataId { get; set; }
        public virtual Accountant Accountant { get; set; }
        public virtual AccountantSubstitute AccountantSubstitute { get; set; }
}
    public class Accountant : TimeTrackBase
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        public Guid AccountantsId { get; set; }
        public virtual Person AccountantPerson { get; set; }
    }

   public class AccountantSubstitute : TimeTrackBase
   {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        public Guid AccountantsId { get; set; }
        public virtual Person AccountantPerson { get; set; }
   }

Проблема в том, что AccountantsId становится Guid.Empty (00000000-0000-0000-0000-000000000000) в таблице AccountantSubstitute, а AccountantsId в таблица Accountant работает должным образом.

Должен ли он не работать и в AccountantSubstitute?

enter image description here enter image description here

1 Ответ

0 голосов
/ 17 июня 2020

Вы должны создать класс конфигурации и настроить свойства более подробно.

   public class AccountantConfiguration : IEntityTypeConfiguration<Accountant>
    {
        /// <inheritdoc />
        public void Configure(EntityTypeBuilder<Communication> builder)
        {
            if (builder == null)
                return;

            builder.ToTable("Accountant");

            builder.HasKey(k => new {Id = k.Id});

            builder.Property(p => p.Id)
                .IsRequired();

            builder.Property(p => p.AccountantsId)
                .IsRequired()
                .HasDefaultValueSql("newid()")
                .ValueGeneratedOnAdd();

            ...

        }
    }

И добавить эту конфигурацию в класс DbContext

public sealed class Context : DbContext
{

    ...

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        if (builder == null) 
            return;

        builder.ApplyConfiguration(new AccountantConfiguration());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...