1

我首先在使用 EF 4.1 和数据库的网站上工作。我也在使用 aspnet 表,特别aspnet_Users是使用 Guid 作为主键的表。aspnet_Users因此,我的自定义 User 表也有一个 Guid 作为主键,它是id的外键。

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

使用 Sql Server Management Studio,我已将所有主键的默认值更新为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;
    }
}

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

另一种解决方案是使用 int 而不是 Guid 作为主键,但是我怎样才能在我的自定义 User 表和aspnet_Users使用 Guid 之间建立链接?

非常感谢 !

4

2 回答 2

2

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

于 2017-08-26T19:53:17.193 回答
0

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

于 2015-04-13T15:08:04.517 回答