Guid为空,首先是newsequentialid()和EF数据库



我正在开发一个网站,首先使用EF 4.1和数据库。我还使用aspnet表,特别是使用Guid作为主键的aspnet_Users。因此,我的自定义用户表也有一个Guid作为主键,它是aspnet_Usersid的外键。

最近,我读到使用Guid作为主键是个坏主意,除非使用newsequentialid()

使用SqlServerManagementStudio,我已将所有主键的默认值更新为newsequentialid(),并在edmx设计器中将StoreGeneratedPattern设置为Identity

然而,每当我尝试添加对象(例如Item,它有一个Guid主键)时,它的id在数据库中都是空的(全部为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;
}
}

我忘了什么吗?尽管我为数据库的主键设置了默认值,但它们在edmx设计器中的Default Value属性仍然是None。这正常吗?

另一个解决方案是使用int而不是Guid作为主键,但我如何在自定义用户表和使用Guid的aspnet_Users之间建立链接?

非常感谢!

在模型设计器中获取主键的属性。找到StoreGeneratedPattern并将其从None更改为Identity。保存所有内容,现在主键将正确生成。

除非您需要序列标识符,否则使用NEWID()是完全可以的。但您可能不需要Guid/uniqueidentifier,您可以使用intbigint以及标识或SQL序列对象。

相关内容

  • 没有找到相关文章

最新更新