C# 实体框架“;元数据集合中不存在成员[…]
我让我不同的项目运作起来,不得不改变模型中的一件小事,这迫使我放下表格,重新创建它们。经过长时间的研究,我发现我必须使用初始值设定项(DropCreateDatabaseAlways)。此外,我还创建了一些自定义初始值设定项,用测试数据为数据库种子。现在,每次运行应用程序时,我都会收到以下异常: 标识为“SGDB.DAL.Contexts.Person\u Department”的成员 元数据集合中不存在。参数名称:identity 在我改变我的模式之前(与个人和部门之间的关系无关),一切都很顺利。此外,我所有模型的标识符都被命名为Id(正如EF所期望的),并用[Key]属性修饰 是的,我已经读过关于这个主题的其他文章,但是解决方案是为每个外键创建一个Id属性(在我的例子中是DepartmentId in Person.cs),但我不喜欢这样,特别是因为我知道它以前是有效的 原因可能是什么 更新1: 我正试图培养新的人才,如下所示:C# 实体框架“;元数据集合中不存在成员[…],c#,entity-framework,exception,datacontext,C#,Entity Framework,Exception,Datacontext,我让我不同的项目运作起来,不得不改变模型中的一件小事,这迫使我放下表格,重新创建它们。经过长时间的研究,我发现我必须使用初始值设定项(DropCreateDatabaseAlways)。此外,我还创建了一些自定义初始值设定项,用测试数据为数据库种子。现在,每次运行应用程序时,我都会收到以下异常: 标识为“SGDB.DAL.Contexts.Person\u Department”的成员 元数据集合中不存在。参数名称:identity 在我改变我的模式之前(与个人和部门之间的关系无关),一切都很顺
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框架正在通过调用scope_identity()对插入的数据行执行验证。但是,“代替插入”触发器将更改插入的上下文,从而使EF系统对scope_identity的调用返回null 您可以执行以下操作:
希望它能对您有所帮助。我也遇到了这个问题,通过将下面的代码添加到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();)-或者这可能是问题所在?如果是,我应该如何从数据库中检索数据以插入新的人员?