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下的对象间引用时,由于数据库已保存的对象会被复制一份,此时其时间类型可能被转为空(未经确认,可以参考这里)。解决方法,尽量为时间类型增加默认值或者可空类型。