Генерация Guid по базе данных автоматически - PullRequest
0 голосов
/ 25 марта 2019

Это относится к Entity Framework 6, но, возможно, оно не связано с версией.

У меня есть класс с идентификатором Guid, но по наследству.

public partial class TestObject : SomeModel<Guid>
{

        public TestObject()
        {
        }

    .
    .
    .
        public virtual ICollection<TestObject1> TestObject1s { get; set; }

        public virtual ICollection<TestObject2> TestObject1s { get; set; }
}


    public abstract class SomeModel<TKey>
    {
        public TKey Id { get; set; }

    }

Прямо сейчас я хотел бы изменить эту модель, чтобы автоматически генерировать Id по базе данных. Я изменил класс TestObject добавив

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

до

public partial class TestObject : SomeModel<Guid>
{

        public TestObject()
        {
        }

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


    .
    .
    .
        public virtual ICollection<TestObject1> TestObject1s { get; set; }

        public virtual ICollection<TestObject2> TestObject1s { get; set; }
}

Но после выполнения команды add-migration test я получил пустую реализацию

public partial class test : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}

Это значит, что ничего не изменится. И, конечно же, после выполнения update-Database это не повлияло на базу данных.

Но если я создам совершенно новый класс (реализация которого такая же, как у TestObject). Это работает, и это влияет на базу данных.

public partial class TestObjectNew : SomeModel<Guid>
{

        public TestObjectNew()
        {
        }

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

    .
    .
    .
        public virtual ICollection<TestObject1> TestObject1s { get; set; }

        public virtual ICollection<TestObject2> TestObject1s { get; set; }


}

Может ли кто-нибудь объяснить это поведение?

Как я могу обновить свой класс, чтобы получить идентификатор автоматической генерации по базе данных?

1 Ответ

0 голосов
/ 26 марта 2019

Вы удалили TKey Id из своего базового класса? (Базовый класс сейчас даже служит цели?)

Свойство также должно быть помечено как ключ:

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

Затем вы можете указать значение по умолчанию в вашей миграции. См .: GUID Entity Framework 6 в качестве первичного ключа: невозможно вставить значение NULL в столбец «Id», таблица «FileStore»; столбец не допускает пустых значений

...