Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不存在列的Linq错误_C#_Asp.net_Entity Framework_Visual Studio_Linq To Sql - Fatal编程技术网

C# 不存在列的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生成的外键分配:

我正在接受实习培训,以了解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抱歉,我还在学习。那是什么文件?它在我的项目中位于哪里?