zoukankan      html  css  js  c++  java
  • DbInitializer.cs初始化过程中context.entityName.Add()遇到的类型不匹配错误

        用Asp.Net Core+EF Core建立一个测试项目过程中,使用DbInitializaer.cs进行数据库表的初始化工作,当项目测试运行时执行到context.实体名.Add()时,提示错误信息:

    The 'UserStatusID' on entity type 'UserStatus' does not have a value set and no value generator is available for properties of type 'Byte'. Either set a value for the property before adding the entity or configure a value generator for properties of type 'Byte'.

        经过检查,各处的类型设置没有问题,检索网上的信息 Linq To EF 使用小知识(添加记录后获取添加的自增ID和叫“ID”的列不是自增列不让插入的问题)  ,在这篇文章中的到启示,最终解决了问题。

        留作记录,具体如下:

    model模型定义:

        public class UserStatus
        {
            [DatabaseGenerated(DatabaseGeneratedOption.None)]public byte UserStatusID { get; set; }
    
            [Required]public string Discription { get; set; }
        }

    DbInitializer.cs中的初始化代码

                if (!context.UserStatuses.Any())
                {
                    var userStatus = new UserStatus[]
                    {
                        new UserStatus {UserStatusID=0,Discription="在岗" },
                        new UserStatus {UserStatusID=1,Discription="调走" },
                        new UserStatus {UserStatusID=2,Discription="退休" },
                    };
                    foreach (var u in userStatus)
                    {
                        context.UserStatuses.Add(u);
                    }
                    context.SaveChanges();
                }

        执行到高亮的context.UserStatuses.Add(u)时,就出现了上面的错误。

        后来,修改了Data文件夹中的***Context.cs文件中的OnMouldCreating,增加高亮部分,初始化成功,在数据库中查到了正确的初始数据。

            protected override void OnModelCreating(ModelBuilder builder)
            {
                builder.Entity<UserAuthority>().ToTable("Authority");
                builder.Entity<UserAuthority>().Property(p => p.UserAuthorityID).ValueGeneratedNever();
                //其他。。。。。。
            }

        思考:

        包括www.asp.net上一些教程给出的例子,模型的主键均没有定义[DatabaseGenerated(DatabaseGeneratedOption.None)]属性,在DbInitializer.cs初始数据定义时没有什么特别的要求。但是一旦定义了该属性,就需要在上下文定义类中OnModelCreating()中,一并给出该信息。

        这个问题有些奇怪,非得在两处都进行这样的声明方可,不是不项目启动的时候文件执行顺序的问题?

      

  • 相关阅读:
    poj 3253 Fence Repair (优先队列,哈弗曼)
    容斥原理 (转载)
    poj 1088 滑雪 DP(dfs的记忆化搜索)
    饭卡 01背包 + 贪心
    N分之一 竖式除法模拟
    poj2325 大数除法+贪心
    优先队列重载运算符< 以及初始化列表
    POJ 2718 Smallest Difference(贪心 or next_permutation暴力枚举)
    HASH算法
    字符串匹配算法——KMP算法
  • 原文地址:https://www.cnblogs.com/jqdy/p/5969673.html
Copyright © 2011-2022 走看看