EntityFramwork 6 - 调用SaveChanges时未设置ID()

时间:2016-09-22 17:57:19

标签: c# mysql entity-framework azure entity-framework-6

我的EntityFramework有点问题。 我的设置如下: 我正在使用Code-First Migrations,这是数据库结构:

using Microsoft.Azure.Mobile.Server;

namespace myProject.DataObjects
{
    public class ListRelations : EntityData
    {
        public string userID { get; set; }
        public bool read { get; set; }
        public bool write { get; set; }
    }
}

现在从EnitityData开始,应该添加ID字段和所有元数据,对吧? 当我尝试像这样填充数据库时:

            var relations = new ListRelations();
            relations.userID = currentUser;
            relations.read = true;
            relations.write = true;
            relations.listID = current.Id;
            context.ListRelationsSet.Add(relations);
            try {
                context.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        Trace.TraceInformation("Property: {0} Error: {1}",
                                                validationError.PropertyName,
                                                validationError.ErrorMessage);
                    }
                }
            }

我收到错误,说需要填充ID字段。 但是,数据库不应该为我做这个吗? 我有一点困惑, 欢迎任何帮助!

1 个答案:

答案 0 :(得分:1)

使用

public class ListRelations : EntityData
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity),
     Column(TypeName = "varchar"),
     MaxLength(20),
     Key]
    public string userID { get; set; }
    public bool read { get; set; }
    public bool write { get; set; }
}

这取决于您的数据库提供程序,但是例如T-Sql有一个名为newsequentialid()的过程来帮助填充这些列。

迁移中的样本使用可能是

 Id = c.Guid(nullable: false, identity: true, defaultValueSql: "newsequentialid()"),
相关问题