Создать дубликат идентификатора - PullRequest
0 голосов
/ 02 июня 2019

Я создаю проект, используя asp.net core web api и cosmos db. Я генерирую идентификатор как значение GUID, я автоматически генерирую идентификатор. Но это создает дублирующее значение.

файл work.cs:

 public class work
        {
            [JsonProperty("id")]
            public Guid Id { get; set; }

            [JsonProperty("name")]
            public string name { get; set; }

            public List<Industy> Industy { get; set; }
            public work()
            {
                if (Id == null)
                {
                    Id = Guid.NewGuid();
                }
                else
                {
                    Id = Id;
                }
            }
        }

Файл Industry.cs:

public class Industy
    {    
        [JsonProperty("Id")]
        public Guid Id { get; set; }

        [JsonProperty("IdustryId")]
        public int IdustryId { get; set; }

        [JsonProperty("IdustryName")]
        public string IdustryName { get; set; }


        public Industy()
        {
            if (Id == null)
            {
                Id = Guid.NewGuid();
            }
            else
            {
                Id = Id;
            }
        }    
    }

Выход:



>  {
>     "id": "00000000-0000-0000-0000-000000000000",
>     "Name": "string",
>     "industy": {
>       "id": "00000000-0000-0000-0000-000000000000",
>       "IdustryId": 0,
                 }
>  }   

Если я ввожу более одного значения без идентификатора, это покажет мне ошибку, идентификатор уже существует. пожалуйста, помогите мне исправить это.

Ответы [ 3 ]

2 голосов
/ 02 июня 2019

Отметьте public Guid Id { get; set; } как обнуляемые в обеих моделях:

public Guid? Id { get; set; }

Guid - это структура и тип значения. Это означает, что вы должны сравнить с его значением по умолчанию вместо нуля или пометить его как обнуляемый.

1 голос
/ 02 июня 2019

@ mexanich имеет хорошее решение.Тем не менее, вы можете попробовать еще один подход.Если вы не хотите менять свою собственность на nullable, обновите условие, как показано ниже.Также нет необходимости в блоке else.Вы можете устранить это.

if (Id == default(Guid))
{
    Id = Guid.NewGuid();
}
0 голосов
/ 02 июня 2019

Вы можете определить атрибут над свойством

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]  
public Guid Id { get; set; }

, а также вы можете использовать свободный API.Введите код ниже в DbContext в методе OnModelCreating:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Industy>().Property(x => x.ID).HasDefaultValueSql("NEWID()");
}
...