zoukankan      html  css  js  c++  java
  • [EF5.0CODE FIRST]部分错误集锦

    1.无法确定关系的主体端。添加的多个实体可能主键相同。

    Unable to determine the principal end of the 'LetLord.Models.ResidentialProperty_UserProfile' relationship. Multiple added entities may have the same primary key.

        Category root=new Category{ Title="Root" };
        for(int i=0;i<20;i++){
        Category branch =new Category { Title="Branch A"};
        branch.Childs.Add(new Category { Title="Branch A-1"});
        branch.Childs.Add(new Category { Title="Branch A-2"});
        branch.Childs.Add(new Category { Title="Branch A-3"});
        branch.Childs.Add(new Category { Title="Branch A-4"});
        branch.Childs.Add(new Category { Title="Branch A-5"});
        root.Childs.Add(branch);
        }
        db.Categories.Add(root);
        db.SaveChanges();
    

     场景如上,实体具有自增长的int类型主键时,EF无法自动处理多个同类对象间的主键。可以尝试在Seed中处理时,先制定一个临时主键。EF会根据临时主键的不同来管理不同的实例,在更新数据库时,会自动替换所有的临时主键。

    方法如下:

        int Id=0;
        Category root=new Category{ Title="Root",ID=++Id };
        for(int i=0;i<20;i++){
        Category branch =new Category { Title="Branch A", ID=++Id};
        branch.Childs.Add(new Category { Title="Branch A-1", ID=++Id});
        branch.Childs.Add(new Category { Title="Branch A-2", ID=++Id});
        branch.Childs.Add(new Category { Title="Branch A-3", ID=++Id});
        branch.Childs.Add(new Category { Title="Branch A-4", ID=++Id});
        branch.Childs.Add(new Category { Title="Branch A-5", ID=++Id});
        root.Childs.Add(branch);
        }
        db.Categories.Add(root);
        db.SaveChanges();
    

     该方法来源自:http://e10.in/blog/ef4-multiple-added-entities-may-have-the-same-primary-key

    2.无法将“update-database”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

    此时应该重新注册相关的Nuget引用。

    3.无法确定依赖操作的有效顺序。由于外键约束、模型要求或存储生成的值,因此可能存在依赖关系。 

    一般问题在于1对多关系时的表设计,特别有可能出现在自关联的情况下(如树状结构),此时最好将关联对象设置为可空,或者保证关联顺序正确。如下:

            public virtual EPDepart ParentDepart
            {
                get;
                set;
            }
    
            [ForeignKey("ParentDepart")]
            public int? ParentId { get; set; }
    

     4.The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value

    据说此问题可能由多个问题引起,比如不在同一个Context下的对象间引用时,由于数据库已保存的对象会被复制一份,此时其时间类型可能被转为空(未经确认,可以参考这里)。解决方法,尽量为时间类型增加默认值或者可空类型。

  • 相关阅读:
    3-1
    3-2
    习题二 8
    习题二 3
    习题二 5
    习题二 4
    习题二 6
    实验三-2未完成
    实验三
    心得
  • 原文地址:https://www.cnblogs.com/tukzer/p/3033326.html
Copyright © 2011-2022 走看看