使用Entity Framework将对象保存到MySQL后,对象ID仍显示为0

时间:2013-10-01 07:39:09

标签: mysql entity-framework

我正在使用Entity Framework并且连接到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.

根据this,我尝试添加

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; }
}

3 个答案:

答案 0 :(得分:0)

尝试使用[Key]属性修饰您的ID。

答案 1 :(得分:0)

它应该是这个属性

[DatabaseGenerated(DatabaseGenerationOption.Identity)]

但是,这应该是默认值。

[Key]属性应该是不必要的,因为列名Id是神奇的......虽然这可能只是在使用C#的接受命名约定时的情况。

我想知道您的long属性是id可能是Id,还是可能是命名约定......您可以尝试命名{{1}}。

答案 2 :(得分:0)

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

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

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