请注意-创建表而不是数据库,因为我正在处理托管环境并且我没有允许创建数据库的用户。提交数据库更新工作正常,但检索数据会产生异常:异常详细信息:System.Data.SqlClient.SqlException:对象名称“dbo.EventHosts”无效。我读过它的发生是因为我没有使用EFCodeFirst创建数据库。很好,但是我该如何优雅地解决这个问题呢?所有生成的表都没有像dbo这样的前缀。像这样的解决方案不起作用,而且一点也不优雅:[Table("EventHosts",Schema="")]回答第一个问题:使用您的托管服务提供商为您创建的架构。回答你的第二个问题:目前没有直接的方法来全局更改默认模式,因为你不能修改现有的约定或创建新的约定。你可以尝试破解它。例如,您可以覆盖OnModelCreating并使用反射来获取在您的上下文中声明的所有DbSet属性。您可以对这些属性使用一个简单的循环,并创建一个ToTable映射调用,并将属性名称作为表名称和自定义架构。需要一些思考才能完成这项工作。或者,您可以尝试通过实现自定义约定来实现一些可重用的方法。您可以找到许多关于在EF中使用您自己的约定的不同文章。一些示例:我未经测试的先进想法遵循相同的原则,并创建了程序集级别的属性,这些属性将由约定机制处理并应用于所有实体。尝试在SQLSERVER中将默认架构名称设置为“dbo”。http://msdn.microsoft.com/en-us/library/ms173423.aspx出现此错误的原因是名为“EventHosts”的表可能不存在或该表已重命名为其他名称,请检查...https://stackoverflow.com/a/12808316/3069271我遇到了同样的问题,这是映射和数据库之间的复数问题。好吧,我的问题是我有一个名为dbo.UserState的表,在C#代码中,EFCodeFirst试图访问dbo.UserStates(因为复数)。解决办法是把Table属性放在类的最上面,指定准确的表名:会用到,需要多了解C#学习教程,希望大家多多关注—[Table("UserState")]publicclassUserState{[Key]publicintUserId{get;放;}}本文采集自网络,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
