其他分享
首页 > 其他分享> > 从生成的表中检索数据时,无效的对象名称’dbo.TableName’

从生成的表中检索数据时,无效的对象名称’dbo.TableName’

作者:互联网

我首先使用实体​​框架代码创建表.请注意-创建表而不是数据库,因为我正在托管环境上工作,并且我没有允许创建数据库的用户.

提交数据库更新工作正常,但检索数据会出现以下异常:

Exception Details: System.Data.SqlClient.SqlException: Invalid object name ‘dbo.EventHosts’.

我读到它发生是因为我没有使用EF Code First创建数据库.很好,但是我该如何优雅地解决呢?

所有生成的表都没有像dbo这样的前缀.这样的解决方案是行不通的,而且一点也不优雅:

[Table("EventHosts", Schema = "")]

解决方法:

要回答您的第一个问题:使用托管服务提供商为您创建的架构.

回答第二个问题:否,目前尚无直接更改全局默认架构的直接方法,因为您无法修改现有约定或创建新约定.您可以尝试修改它.

例如,您可以覆盖OnModelCreating并使用反射来获取所有DbSet<>.在上下文中声明的属性.比起您可以对这些属性使用简单循环,并使用属性名称作为表名称和自定义架构来创建ToTable映射调用.这项工作需要一些思考.

另外,您可以尝试通过实现自定义约定来做一些可重用的方法.您可以找到许多关于在EF中使用自己的约定的不同文章.一些例子:

> Custom Conventions in Entity Framework Code First v 4.1
> Conventions in Entity Framework 4.1 Final

我未经测试的高级想法是遵循相同的原理并创建程序集级别的属性,该属性将由约定机制处理并应用于您的所有实体.

标签:ef-code-first,c,net,entity-framework,sql-server
来源: https://codeday.me/bug/20191201/2080261.html