Сначала Guid пуст с newsequentialid() и базой данных EF

Я работаю над сайтом, используя EF 4.1 и базу данных в первую очередь. Я также использую таблицы aspnet, особенно aspnet_Users который использует Guid в качестве первичного ключа. Следовательно, моя пользовательская таблица User также имеет Guid в качестве первичного ключа, который является внешним ключом для aspnet_Users Я бы.

Недавно я прочитал, что использование Guid в качестве первичных ключей было плохой идеей, если не использовать newsequentialid(),

С Sql Server Management Studio я обновил значение по умолчанию всех моих первичных ключей на newsequentialid()и установить StoreGeneratedPattern в Identity в моем дизайнере edmx.

Однако всякий раз, когда я пытаюсь добавить объект (например, Item который имеет первичный ключ Guid), его идентификатор остается пустым (все 0) в базе данных.

public void CreateItem()
{
    using (var uof = new UnitOfWork())
    {
        Item item = new Item();
        itemRepo.Add(item);
        uof.Commit();
    }
}

И метод добавления:

public class RepositoryBase<TObject> where TObject : IEntity
{
    protected CavalenaEntities entities
    {
        get { return UnitOfWork.Current.Context; }
    }

    public void Add(TObject entity)
    {
        entities.Entry(entity).State = System.Data.EntityState.Added;
    }
}

Я что-то забыл? Хотя я установил значение по умолчанию для первичных ключей моей базы данных, их Default Value собственность в дизайнере edmx все еще None, Это нормально?

Другим решением было бы использовать int в качестве первичных ключей вместо Guid, но тогда как мне сделать связь между моей пользовательской таблицей User и aspnet_Usersкоторый использует Guid?

Большое спасибо!

2 ответа

Решение

С помощью NEWID() абсолютно нормально, если вам не нужны идентификаторы последовательности. Но тогда вам, вероятно, не нужно Guid/uniqueidentifier, ты можешь использовать int или же bigint и личность или объект последовательности SQL.

В конструкторе моделей получить свойства Первичного ключа. Найдите StoreGeneratedPattern и измените его с None на Identity. сохраните все и теперь первичный ключ будет сгенерирован правильно.

Другие вопросы по тегам