Сопоставьте столбец с ИДЕНТИЧНОСТЬЮ в БД - PullRequest
1 голос
/ 09 апреля 2010

Хотя я пометил свой столбец идентификаторов .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);
    }
}

Поскольку я использую EF для создания и перестройки базы данных для интеграционного тестирования, мне действительно нужно, чтобы это делалось автоматически ...

EDIT: Хм ... В комментарии меня попросили дать достаточно кода для его выполнения, поэтому я вырезал и вставил свой код в консольное приложение (чтобы вам не понадобились все мои классы ...), и вдруг он просто сработал , Наверное, я где-то забыл какой-то вызов метода, хотя не смог выяснить, где.

Я опубликую работающий код решения в ответе на это сообщение, на случай, если кто-то другой найдет его.

1 Ответ

1 голос
/ 09 апреля 2010

Запуск этого кода решает проблему. Наверное, я где-то забыл шаг, поэтому, если у вас такая же проблема, убедитесь, что вы делаете все эти вещи:

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