我正在尝试使用实体框架将记录从进入 sqlserver 上的数据库的 webform 输入添加到数据库。在本地一切正常。
我使用 webmatrix 将我的网站发布到我的远程服务器,网站和我的本地版本的数据库在远程服务器上成功地重新创建了所有数据。
但是,当需要将记录添加到数据库时,它会在远程服务器上出现错误,我设法跟踪到 ctx.Students.Add 行。
using (var ctx = new HDPS_SchoolDataEntities())
{
SchoolDataModel.Student temp = new SchoolDataModel.Student();
temp.Name = this.FirstName;
temp.Surname = this.Surname;
temp.Parents = this.Parents;
ctx.Students.Add(temp);
ctx.SaveChanges();
}
我找不到可以工作的本地版本和无法工作的远程服务器上的版本之间的任何区别。web.config 似乎已按预期进行配置,所有必要的 dll 都在我的 bin 文件夹中,但它无法在远程服务器上运行......任何想法可能有什么问题?
糟糕,忘记了错误信息!
编辑
安装 .net 4.5 并将连接模式从 windows 身份验证更改为 SQL 身份验证后,错误现在变为:
如果在 Code First 模式下使用,使用用于 Database First 和 Model First 开发的 T4 模板生成的代码可能无法正常工作。要继续使用 Database First 或 Model First,请确保在执行应用程序的配置文件中指定了实体框架连接字符串。要使用从 Database First 或 Model First 生成的这些类,使用 Code First 添加使用属性或 DbModelBuilder API 的任何其他配置,然后删除引发此异常的代码。
网络服务器上的所有内容都应该与复制整个网站时相同,但它在本地运行良好,所以不确定问题是什么......
好的,我在这个网页的帮助下解决了这个问题
http://blog.oneunicorn.com/2012/02/26/dont-use-code-first-by-mistake/
简而言之,似乎 webmatrix 在上传到服务器时不包含连接字符串的元数据部分,因此未引用包含将类映射到数据库表的所有信息的 EDMX 文件,导致对框架的任何查询失败。
一旦我将实体框架向导生成的原始连接字符串粘贴到服务器上,一切正常。