它与Entity Framework 6有关,但可能与版本无关。
我有一个具有Guid ID的类,但通过继承。
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; }
}
有人可以解释这种行为吗?
如何更新我的班级以获取数据库的自动生成ID?
答案 0 :(得分:0)
您是否从基类中删除了TKey Id
? (基层现在甚至有目的吗?)
该属性也应标记为键:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
然后,您可以在迁移中指定默认值。参见:Entity Framework 6 GUID as primary key: Cannot insert the value NULL into column 'Id', table 'FileStore'; column does not allow nulls