从生成的表中检索数据时,无效的对象名称’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