C# 将列映射为db中的标识

C# 将列映射为db中的标识,c#,entity-framework-4,ef-code-first,identity-column,ef-model-first,C#,Entity Framework 4,Ef Code First,Identity Column,Ef Model First,虽然我已将ID列标记为.Identity(),但生成的数据库架构没有将Identity设置为true,这在添加记录时会出现问题。如果我手动编辑数据库模式(在SQL Management Studio中)以将Id列标记为IDENTITY,那么一切都可以按照我的要求运行-我只是无法让EF自己做到这一点 这是我的完整映射: public class EntryConfiguration : EntityConfiguration<Entry> { public EntryConfi

虽然我已将ID列标记为
.Identity()
,但生成的数据库架构没有将
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);
    }
}
公共类入口配置:EntityConfiguration
{
公共入口配置()
{
属性(e=>e.Id).IsIdentity();
财产(e=>e.Amount);
属性(e=>e.Description).IsRequired();
财产(e=>e.TransactionDate);
关系(e=>(ICollection)e.Tags).FromProperty(t=>t.Entries);
}
}
由于我正在使用EF构建和重新构建用于集成测试的数据库,我真的需要自动完成这项工作

编辑: 陛下在一篇评论中,我被要求提供足够的代码来执行此操作,所以我将代码剪切并粘贴到一个控制台应用程序中(这样你就不需要我所有的类了…),突然它就工作了。我想我忘了在什么地方调用某个方法,虽然我还没弄清楚在哪里


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

运行此代码可以解决问题。我想我一定是忘记了某个步骤,所以如果你有同样的问题,请确保你做了所有这些事情:

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();
var connection=GetUnOpenedSqlConnection();//任何继承的连接
//从数据库连接是好的。
var builder=new ContextBuilder();//实际上我有自己的课
//继承自
//ObjectContext,但那是
//不是问题(我查过了)。
builder.Configurations.Add(EntryConfiguration);//EntryConfiguration是
//问题中的类
var context=builder.Create(连接);
if(context.DatabaseExists())
{context.DeleteDatabase();}
context.CreateDatabase();

运行此代码可以解决问题。我想我一定是忘记了某个步骤,所以如果你有同样的问题,请确保你做了所有这些事情:

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();
var connection=GetUnOpenedSqlConnection();//任何继承的连接
//从数据库连接是好的。
var builder=new ContextBuilder();//实际上我有自己的课
//继承自
//ObjectContext,但那是
//不是问题(我查过了)。
builder.Configurations.Add(EntryConfiguration);//EntryConfiguration是
//问题中的类
var context=builder.Create(连接);
if(context.DatabaseExists())
{context.DeleteDatabase();}
context.CreateDatabase();

如果您可以包含在本地运行/尝试此操作所需的代码,我会让它旋转一下,看看这里发生了什么。如果您可以包含在本地运行/尝试此操作所需的代码,我会让它旋转一下,看看这里发生了什么。