1

雖然我用.Identity()標記了我的ID列,但生成的數據庫架構沒有將IDENTITY設置爲true,這會在添加記錄時出現問題。如果我手動編輯數據庫模式(在SQL Management Studio中)以使Id列標記爲IDENTITY,那麼所有內容都可以按照我的要求工作 - 我無法讓EF自己做這件事。在db中將列映射爲IDENTITY

這是我的完整映射:

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

如果您能提供運行所需的代碼/試試這個地方我想給它看看這裏發生了什麼。 – 2010-04-08 22:13:56

回答

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