将列映射为db中的IDENTITY

时间:2010-04-08 20:19:58

标签: c# entity-framework-4 ef-code-first identity-column ef-model-first

虽然我已使用.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来构建和重建数据库以进行集成测试,我真的需要自动完成...

修改 嗯......在评论中,我被要求提供足够的代码来执行此操作,因此我将我的代码剪切并粘贴到控制台应用程序中(因此您不需要我所有的课程......)然后它突然发挥作用。我想我忘记了一些方法调用,虽然我还没弄清楚在哪里。

我会在这篇文章的回答中发布工作解决方案代码,以防其他人来寻找它。

1 个答案:

答案 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();