我对MVC编程相当陌生,所以请温和地对待我。我正在开发一个数据库,在这个数据库中,我需要用多到多的关系为数据注入种子。我已经在这个和其他论坛上做了很多搜索,找到了各种各样的建议,但是在我的设置中似乎没有一个有效。当我在添加迁移之后执行更新-数据库命令时,我总是会得到一个错误(“对象引用没有设置为对象的实例”),不管我尝试过什么方法。我有以下模型类:
public class Cognition
{
public int CognitionID { get; set; }
public string CognitionText { get; set; }
public virtual ICollection<Diagnosis> Diagnoses { get; set; }
public virtual ICollection<SubDiagnosis> SubDiagnoses { get; set; }
}
public class Diagnosis
{
public int DiagnosisID { get; set; }
public string DiagnosisText { get; set; }
public virtual ICollection<Cognition> Cognitions { get; set; }
public virtual ICollection<SubCognition> SubCognitions { get; set; }
}此外,我还为SubCognition和SubDiagnoses提供了两个模型类(一对多的关系),为了简单起见,我在这里省略了这些类。然后,我有了以下种子代码:
protected override void Seed(NVD.DAL.NVDContext context)
{
var diagnoses = new[]
{
new Diagnosis { DiagnosisText = "Alzheimer's disease" },
new Diagnosis { DiagnosisText = "Mixed dementia" },
new Diagnosis { DiagnosisText = "Cerebrovascular disease" },
new Diagnosis { DiagnosisText = "Lewy body dementia" },
new Diagnosis { DiagnosisText = "Parkinson's disease (PD)" },
new Diagnosis { DiagnosisText = "Parkinson Plus (PSP/CBD/MSA)" },
new Diagnosis { DiagnosisText = "Huntington's disease" },
new Diagnosis { DiagnosisText = "Frontotemporal dementia" },
new Diagnosis { DiagnosisText = "Normal pressure Hydrocephalus (NPH)" },
new Diagnosis { DiagnosisText = "Other neurodegenerative disorder" },
new Diagnosis { DiagnosisText = "Alcohol" },
new Diagnosis { DiagnosisText = "Other non-neurodegenerative disorder" },
new Diagnosis { DiagnosisText = "Unknown" },
new Diagnosis { DiagnosisText = "SCD" },
new Diagnosis { DiagnosisText = "Psychiatric illness" },
new Diagnosis { DiagnosisText = "NPH" },
new Diagnosis { DiagnosisText = "Other" }
};
context.Diagnoses.AddOrUpdate(r => r.DiagnosisText, diagnoses[0], diagnoses[1], diagnoses[2], diagnoses[3], diagnoses[4], diagnoses[5], diagnoses[6], diagnoses[7], diagnoses[8], diagnoses[9],
diagnoses[10], diagnoses[11], diagnoses[12], diagnoses[13], diagnoses[14], diagnoses[15], diagnoses[16]);
var cognitions = new[]
{
new Cognition { CognitionText = "Normal" },
new Cognition { CognitionText = "Significantly impaired" },
new Cognition { CognitionText = "Mild dementia" },
new Cognition { CognitionText = "Moderate dementia" },
new Cognition { CognitionText = "Severe dementia" }
};
context.Cognitions.AddOrUpdate(r => r.CognitionText, cognitions[0], cognitions[1], cognitions[2], cognitions[3], cognitions[4]);
context.SaveChanges();
cognitions[0].Diagnoses.Add(diagnoses[14]);
context.SaveChanges();
}我知道认知和diagnoses14不是空的,因为我在种子代码中的其他地方使用它们来添加一些一对多的关系,而且我知道这是最后两行代码失败的原因,因为如果我删除所有这些都很好。有人能为我指出正确的方向吗?如何让它起作用?
任何帮助都是非常感谢的!
所有最好的部队
发布于 2018-05-09 09:31:18
我认为问题在于cognitions.Diagnoses是空的。
在cognitions[0].Diagnoses.Add(diagnoses[14]);之前添加以下内容
cognitions[0].Diagnoses = new List<Diagnosis>();顺便说一句。添加两次diagnoses14,这是不必要的。
https://stackoverflow.com/questions/50249887
复制相似问题