Это относится к 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; }
}
Может ли кто-нибудь объяснить это поведение?
Как я могу обновить свой класс, чтобы получить идентификатор автоматической генерации по базе данных?