ASP.NET MVC中使用Entity Framework查询数据表报错如何解决?
报错原因
- 你采用数据库优先(Database First)模式创建ADO.NET实体模型,EF默认启用了Code First数据库初始化策略,运行时会自动校验实体与数据库结构的匹配性,触发运行时异常。
- 配置文件中的连接字符串不符合Database First要求:Database First需要使用包含CSDL/SSDL/MSL元数据路径的实体连接字符串,若误用普通ADO.NET连接字符串,设计阶段可正常加载表,但运行时会出现连接/映射错误。
ETAConfiguration表未设置主键,EF要求所有实体必须映射主键字段,无主键的表查询时会直接抛出异常。
解决方法
1. 禁用Code First初始化策略
在上下文类MyOwnTaxDatabaseEntities的构造函数中添加禁用逻辑:
public MyOwnTaxDatabaseEntities() : base("name=MyOwnTaxDatabaseEntities") { Database.SetInitializer<MyOwnTaxDatabaseEntities>(null); }
2. 修正连接字符串配置
检查Web.config的连接字符串配置,确保是带元数据的实体连接格式,且providerName为System.Data.EntityClient,示例如下:
<add name="MyOwnTaxDatabaseEntities" connectionString="metadata=res://*/你的模型命名空间.你的模型文件名.csdl|res://*/你的模型命名空间.你的模型文件名.ssdl|res://*/你的模型命名空间.你的模型文件名.msl;provider=System.Data.SqlClient;provider connection string="data source=你的SQL Server实例地址;initial catalog=MyOwnTaxDatabase;integrated security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
3. 检查实体主键映射
打开EDMX设计器,确认ETAConfiguration实体已映射对应数据库表的主键字段。若数据库表本身无主键,需先给表添加主键后重新更新实体模型,或手动在EDMX中指定唯一非空字段作为实体主键。
内容的提问来源于stack exchange,提问作者Ahmed Waguih
相关产品推荐
相关产品推荐

