首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC 5数据库中具有多到多关系的种子数据,代码优先

MVC 5数据库中具有多到多关系的种子数据,代码优先
EN

Stack Overflow用户
提问于 2018-05-09 09:26:42
回答 1查看 97关注 0票数 0

我对MVC编程相当陌生,所以请温和地对待我。我正在开发一个数据库,在这个数据库中,我需要用多到多的关系为数据注入种子。我已经在这个和其他论坛上做了很多搜索,找到了各种各样的建议,但是在我的设置中似乎没有一个有效。当我在添加迁移之后执行更新-数据库命令时,我总是会得到一个错误(“对象引用没有设置为对象的实例”),不管我尝试过什么方法。我有以下模型类:

代码语言:javascript
复制
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提供了两个模型类(一对多的关系),为了简单起见,我在这里省略了这些类。然后,我有了以下种子代码:

代码语言:javascript
复制
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不是空的,因为我在种子代码中的其他地方使用它们来添加一些一对多的关系,而且我知道这是最后两行代码失败的原因,因为如果我删除所有这些都很好。有人能为我指出正确的方向吗?如何让它起作用?

任何帮助都是非常感谢的!

所有最好的部队

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-09 09:31:18

我认为问题在于cognitions.Diagnoses是空的。

cognitions[0].Diagnoses.Add(diagnoses[14]);之前添加以下内容

代码语言:javascript
复制
cognitions[0].Diagnoses = new List<Diagnosis>();

顺便说一句。添加两次diagnoses14,这是不必要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50249887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档