C# 不存在列的Linq错误
我正在接受实习培训,以了解asp.net和MVC。我们目前面临着一个我和老板都无法解决的问题。 我有一个预构建的数据库,包含两个表:Camper和Guardian。Camper有一个外键(guardID),可以映射到Guardian的ID 在我的VS项目中,我有两个模型,GuardianEntity和CamperEntity。我还使用LINQtoSQL来创建数据库模型(dbGuardian和dbCamper)。我的控制器将实体模型转换为db模型,反之亦然 以下是LINQ生成的外键分配:C# 不存在列的Linq错误,c#,asp.net,entity-framework,visual-studio,linq-to-sql,C#,Asp.net,Entity Framework,Visual Studio,Linq To Sql,我正在接受实习培训,以了解asp.net和MVC。我们目前面临着一个我和老板都无法解决的问题。 我有一个预构建的数据库,包含两个表:Camper和Guardian。Camper有一个外键(guardID),可以映射到Guardian的ID 在我的VS项目中,我有两个模型,GuardianEntity和CamperEntity。我还使用LINQtoSQL来创建数据库模型(dbGuardian和dbCamper)。我的控制器将实体模型转换为db模型,反之亦然 以下是LINQ生成的外键分配:
[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Guardian_Camper", Storage="_Guardian", ThisKey="guardID", OtherKey="ID", IsForeignKey=true)]
public Guardian Guardian
{
get
{
return this._Guardian.Entity;
}
set
{
Guardian previousValue = this._Guardian.Entity;
if (((previousValue != value)
|| (this._Guardian.HasLoadedOrAssignedValue == false)))
{
this.SendPropertyChanging();
if ((previousValue != null))
{
this._Guardian.Entity = null;
previousValue.Campers.Remove(this);
}
this._Guardian.Entity = value;
if ((value != null))
{
value.Campers.Add(this);
this._guardID = value.ID;
}
else
{
this._guardID = default(int);
}
this.SendPropertyChanged("Guardian");
}
}
}
因此,它似乎将“guardID”识别为映射到“ID”的外键。
但当我运行程序并添加露营者时,它在db.saveChanges()上失败。错误显示为“无效的列名'Guardian_ID'
这个问题与我的问题类似:
除了我遵循那里提供的一个解决方案(按照约定将我的guardID更改为Guardian_ID)之外,错误仍然被抛出,但这次是在寻找“Guardian_ID 1”
我们还注意到,如果DB中键的列名不是'ID',我们会得到一个错误,表示没有分配键,即使.dbml中明确指定了键。根据我的经验,Linq不能很好地处理任何不符合预期的列名。因此,我最近遇到了同样的问题,似乎是由于迁移与模型不同步造成的。对我来说,问题是父数据模型通过FK引用子数据。我要做的是 从“父”模型中删除对“子”的引用。然后添加了反映这一变化的新迁移 然后在Visual Studio的包管理器控制台中运行
更新数据库-Script
编写SQL脚本后,只复制
插入子句。(这是将迁移输入到
_迁移历史记录表)
复制完后,将其粘贴到SSMS中的新查询中。执行
查询只会将条目添加到历史记录和
如果您愿意,迁移将“同步”
然后为了更好的衡量,我再次运行了更新数据库。然后跑了我的车
再次申请,效果良好
简而言之,导致这个问题的原因是我们删除了从子代到父代的引用,而不是相反。对LINQ来说,它似乎认为这种关系仍然存在,所以它将其作为查询的一部分。你有edmx文件吗?@ElishevaWasserman抱歉,我还在学习。那是什么文件?它在我的项目中位于哪里?