C# EF中实体上下文访问tblState触发CS1061错误的处理咨询
C# MVC项目EF访问SQL表触发CS1061编译错误处理方案
开发过程中编写基于实体框架获取下拉框状态列表的代码时,编译阶段在表关联调用行触发报错,问题代码如下:
{ using (RegistrationEntities1 dc = new RegistrationEntities1()) { var state = dc.tblState.ToList(); // 编译报错定位行 List<SelectListItem> li = new List<SelectListItem>(); li.Add(new SelectListItem { Text = "--Select State--", Value = "0" }); foreach (var m in state) { li.Add(new SelectListItem { Text = m.statename, Value = m.stateid.ToString()}); ViewBag.state = li; } } }
错误提示
CS1061:
RegistrationEntities1不包含tblState的定义,且未找到可接受RegistrationEntities1类型作为第一个参数的可访问扩展方法tblState(是否缺少 using 指令或程序集引用?)
对应处理方案
- 核对实体上下文的属性定义
打开RegistrationEntities1的类定义文件(Database First模式下一般是EDMX自动生成的上下文类,Code First模式下是手动编写的DbContext派生类),检查类中映射tblState表的DbSet属性实际名称。常见偏差为EF生成实体时自动移除了表名的t前缀,实际属性名为State而非tblState,此时将代码中的dc.tblState替换为实际定义的属性名即可解决报错。 - 同步更新EF实体模型
如果是Database First/Model First开发模式,大概率是初始生成实体时未将tblState纳入模型范围,或是后续数据库表结构调整后未同步更新EDMX映射。可在EDMX设计界面右键选择“从数据库更新模型”,勾选tblState表完成映射同步,保存后重新编译项目即可识别对应表属性。 - 检查项目引用与命名空间
确认MVC主项目已经引用了RegistrationEntities1所属的类库程序集,且当前代码文件头部已添加对应实体类的命名空间引用,避免因程序集未加载、命名空间未导入导致无法识别实体类中的表定义。 - 清理编译缓存重新生成
如果项目开启了EF预编译映射上下文,旧的编译缓存可能未同步最新的表映射关系。可删除项目bin、obj目录下的所有历史编译产物,重新生成整个解决方案,让EF重新生成完整的实体映射属性。
内容的提问来源于stack exchange,提问作者Subbu Sharma
相关产品推荐
相关产品推荐

