Guid在newsequentialid()和EF数据库中是空的

时间:2015-04-13 15:05:05

标签: c# asp.net entity-framework ef-database-first newsequentialid

我正在使用EF 4.1和数据库的网站上工作。 我也在使用aspnet表,尤其是使用Guid作为主键的aspnet_Users。 因此,我的自定义用户表还有一个Guid作为主键,它是aspnet_Users id的外键。

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

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

但是,每当我尝试添加一个objet(例如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,但是我如何在我的自定义User表和使用Guid的aspnet_Users之间建立链接?

非常感谢!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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