虽然我已使用.Identity()
标记了我的ID列,但生成的数据库架构没有将IDENTITY
设置为true,这在我添加记录时会给我带来问题。如果我手动编辑数据库模式(在SQL Management Studio中)以使Id
列标记为IDENTITY
,那么一切都按照我的意愿运行 - 我不能让EF自己这样做。
这是我的完整映射:
public class EntryConfiguration : EntityConfiguration<Entry>
{
public EntryConfiguration()
{
Property(e => e.Id).IsIdentity();
Property(e => e.Amount);
Property(e => e.Description).IsRequired();
Property(e => e.TransactionDate);
Relationship(e => (ICollection<Tag>)e.Tags).FromProperty(t => t.Entries);
}
}
由于我正在使用EF来构建和重建数据库以进行集成测试,我真的需要自动完成...
修改 嗯......在评论中,我被要求提供足够的代码来执行此操作,因此我将我的代码剪切并粘贴到控制台应用程序中(因此您不需要我所有的课程......)然后它突然发挥作用。我想我忘记了一些方法调用,虽然我还没弄清楚在哪里。
我会在这篇文章的回答中发布工作解决方案代码,以防其他人来寻找它。
答案 0 :(得分:1)
运行此代码可以解决问题。我想我一定忘记了某个地方的步骤,所以如果你遇到同样的问题,请确保你做了所有这些事情:
var connection = GetUnOpenedSqlConnection(); // Any connection that inherits
// from DbConnection is fine.
var builder = new ContextBuilder<ObjectContext>(); // I actually had my own class
// that inherits from
// ObjectContext, but that was
// not the issue (I checked).
builder.Configurations.Add(EntryConfiguration); // EntryConfiguration is the
// class in the question
var context = builder.Create(connection);
if (context.DatabaseExists())
{ context.DeleteDatabase(); }
context.CreateDatabase();