c# - Entity Framework 6 - 调用 SaveChanges() 时未设置

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

我的 EntityFramework 遇到了一些问题。 我的设置如下: 我正在使用代码优先迁移,这是数据库结构:

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

现在从 EnityData 继承应该添加 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 字段。 但是,数据库不应该为我做这件事吗? 我有一点困惑, 欢迎任何帮助!

最佳答案

使用

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()"),

关于c# - Entity Framework 6 - 调用 SaveChanges() 时未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39645829/

相关文章:

mysql - 从一张表中选择 : single-row subquery returns more than one row

c# - Visual Studio - 默认代码生成被禁用

mysql - 无法找到名称为 MySql.Data.EntityFrameworkCore 的提供程序程序集

c# - asp.net c# 代码在 Firefox 上无法正常工作,在其他浏览器上工作正常

c# - 与表组结果的 SQL 同步计数

php - 如何将多个复选框结果存储到一个 mysql 表中

c# - 插入时的自引用主键

c# - UE4 - 对象有反射 - 那为什么要使用 C++?

c# - Application.Restart 不传回参数

mysql - MariaDB 的商业许可证