C# 实体框架“;元数据集合中不存在成员[…]

C# 实体框架“;元数据集合中不存在成员[…],c#,entity-framework,exception,datacontext,C#,Entity Framework,Exception,Datacontext,我让我不同的项目运作起来,不得不改变模型中的一件小事,这迫使我放下表格,重新创建它们。经过长时间的研究,我发现我必须使用初始值设定项(DropCreateDatabaseAlways)。此外,我还创建了一些自定义初始值设定项,用测试数据为数据库种子。现在,每次运行应用程序时,我都会收到以下异常: 标识为“SGDB.DAL.Contexts.Person\u Department”的成员 元数据集合中不存在。参数名称:identity 在我改变我的模式之前(与个人和部门之间的关系无关),一切都很顺

我让我不同的项目运作起来,不得不改变模型中的一件小事,这迫使我放下表格,重新创建它们。经过长时间的研究,我发现我必须使用初始值设定项(DropCreateDatabaseAlways)。此外,我还创建了一些自定义初始值设定项,用测试数据为数据库种子。现在,每次运行应用程序时,我都会收到以下异常:

标识为“SGDB.DAL.Contexts.Person\u Department”的成员 元数据集合中不存在。参数名称:identity

在我改变我的模式之前(与个人和部门之间的关系无关),一切都很顺利。此外,我所有模型的标识符都被命名为Id(正如EF所期望的),并用[Key]属性修饰

是的,我已经读过关于这个主题的其他文章,但是解决方案是为每个外键创建一个Id属性(在我的例子中是DepartmentId in Person.cs),但我不喜欢这样,特别是因为我知道它以前是有效的

原因可能是什么

更新1:

我正试图培养新的人才,如下所示:

protected override void Seed(PersonContext context) {
        base.Seed(context);
        var dep = new DAL.Contexts.DepartmentContext().Departments.First();

        var status = new Status {
            StatusType = "Test"
        };

        var persondata = new PersonData {
            Status = status
        };
        context.Status.Add(status);
        context.PersonData.Add(persondata);
        for (int i = 0; i < 10; i++) {
            var person = new Person {
                Firstname = $"TestPersonFirstname{i}",
                Lastname = $"TestPersonLastname{i}",
                SourceType = COM.SourceType.Manual,
                Department = dep,
                PersonData = persondata
            };
        context.Persons.Add(person);
        }


        context.SaveChanges();

    }
受保护的覆盖无效种子(PersonContext上下文){
种子(上下文);
var dep=new DAL.context.DepartmentContext().Departments.First();
var状态=新状态{
StatusType=“测试”
};
var persondata=新persondata{
状态=状态
};
context.Status.Add(状态);
context.PersonData.Add(PersonData);
对于(int i=0;i<10;i++){
var person=新的人{
Firstname=$“TestPersonFirstname{i}”,
Lastname=$“TestPersonLastname{i}”,
SourceType=COM.SourceType.Manual,
部门=副,
PersonData=PersonData
};
context.Persons.Add(person);
}
SaveChanges();
}

我也有同样的问题。我的问题与我的一个表上的“代替插入”触发器有关

EF框架正在通过调用scope_identity()对插入的数据行执行验证。但是,“代替插入”触发器将更改插入的上下文,从而使EF系统对scope_identity的调用返回null

您可以执行以下操作:

  • 卸下而不是插入触发器(对我有用)
  • 关闭EF framework上下文中的验证。Configuration.ValidateOnSaveEnabled=false;(这也是 工作)

  • 希望它能帮助你。

    我也有同样的问题。我的问题与我的一个表上的“代替插入”触发器有关

    EF框架正在通过调用scope_identity()对插入的数据行执行验证。但是,“代替插入”触发器将更改插入的上下文,从而使EF系统对scope_identity的调用返回null

    您可以执行以下操作:

  • 卸下而不是插入触发器(对我有用)
  • 关闭EF framework上下文中的验证。Configuration.ValidateOnSaveEnabled=false;(这也是 工作)

  • 希望它能对您有所帮助。

    我也遇到了这个问题,通过将下面的代码添加到insert触发器的末尾来解决

    SELECT SCOPE_IDENTITY() AS <IdFieldName>
    
    选择范围_IDENTITY()作为
    
    我也遇到了这个问题,通过将下面的代码添加到insert触发器的末尾来解决

    SELECT SCOPE_IDENTITY() AS <IdFieldName>
    
    选择范围_IDENTITY()作为
    
    对我来说,这是一个插入触发问题

    带有输出select语句的SQL代码(用于调试)保留在insert触发器中


    注释掉触发器中有问题的select语句解决了问题。

    对我来说,这是一个insert触发器问题

    带有输出select语句的SQL代码(用于调试)保留在insert触发器中


    在触发器中注释掉有问题的select语句解决了问题。

    关闭验证并没有解决我的问题。您第一次提到的解决方案是如何工作的?我对EF非常陌生-我正在将一个新部门植入数据库,并在植入一个新人员时调用此数据集(var Department=new DepartmentContext().Departments.First();)-或者这可能是问题所在?如果是的话-我应该如何从数据库中检索数据以插入新的人员?关闭验证并不能解决我的问题。您第一次提到的解决方案是如何工作的?我对EF非常陌生-我正在将一个新部门植入数据库,并在植入一个新人员时调用此数据集(var Department=new DepartmentContext().Departments.First();)-或者这可能是问题所在?如果是,我应该如何从数据库中检索数据以插入新的人员?