0

我正在使用实体框架并连接到 MySQL 数据库。id 列设置为使用 StoreGeneratedPattern Identity,并且数据库中的列已设置为自动增量。当我创建一个新对象并将其保存到数据库时,该项目在数据库中正确发布。但是,保存后,C# 中对象的 id 保持为 0,而不是反映数据库分配的值。

部分代码如下:

Group newGroup = new Group("MyGroupName", "Active");
dbContext.Groups.Add(newGroup);
dbContext.SaveChanges();
int testId = newGroup.id;

即使“newGroup”使用数据库分配的 id 保存在数据库中,但当我读取 id 时(例如读取 testId 时),id 仍然为 0。

基于,我尝试添加

dbContext.Entry(newGroup).Reload();

在 SaveChanges() 之后,我也尝试过(基于thisthis)添加

var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
objectContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, newGroup);

在 SaveChanges() 之后试图从数据库中刷新对象(以及因此的 id),但问题仍然存在。如何获取数据库分配的 id?

编辑:为组添加类定义:

[Table("groups")]    
public partial class Group
{
    public Group()
    {
        this.user_groups = new HashSet<UserGroup>();
    }

    public long id { get; set; }
    public string name { get; set; }
    public string status { get; set; }
    public System.DateTime created_at { get; set; }
    public System.DateTime updated_at { get; set; }

    public virtual ICollection<UserGroup> user_groups { get; set; }
}
4

3 回答 3

0

我的项目也有同样的问题。我所做的解决方法是按 ID 降序排列表(组)并选择第一条或默认记录,然后选择 ID 列。

var newID = dbcontext.Groups.OrderByDescending(x => x.id).FirstOrDefault().ID

然后,您可以将其分配给您需要的任何内容并再次保存更改。我知道这是一个旧线程,但希望这会有所帮助。似乎应该有更好的方法来做到这一点......

于 2014-01-14T00:05:55.027 回答
0

它应该是这个属性

[DatabaseGenerated(DatabaseGenerationOption.Identity)]

但是,这应该是默认值。

[Key]属性应该是不必要的,因为列名Id是神奇的......尽管这可能仅在使用 C# 公认的命名约定时才会出现。

我想知道是否可能是long您的id属性被键入,或者可能是命名约定......您可以尝试命名它Id

于 2013-10-01T12:40:01.953 回答
0

尝试使用 [Key] 属性装饰您的 id。

于 2013-10-01T11:26:23.640 回答