Сначала 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. сохраните все и теперь первичный ключ будет сгенерирован правильно.