我正在使用 Entity Framework
创建 MVC Azure 移动应用程序服务
我创建了一个实体模型
,如下所示:
public class Regions : EntityData
{
public string Id { get; set; }
public string Name { get; set; }
}
我已经创建了一个 TableController,因此我通过发出 get 请求来查询:
http://localhost:3000/tables/Regions
这会返回一个错误:
"exceptionMessage": "Invalid column name 'Id'.\r\nInvalid column name 'Version'.\r\nInvalid column name 'CreatedAt'.\r\nInvalid column name 'UpdatedAt'.",
输出中生成的查询是:
'SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Name] AS [Name],
[Extent1].[Version] AS [Version],
[Extent1].[CreatedAt] AS [CreatedAt],
[Extent1].[UpdatedAt] AS [UpdatedAt],
[Extent1].[Deleted] AS [Deleted]
FROM [dbo].[Region] AS [Extent1]''
所以我的问题是如何将这些列添加到我现有的数据库中,以便我的移动应用服务
能够正常工作?
PS。这与我之前提出的问题 here 的评论有关。
最佳答案
如果这是一项新服务,您不使用现有数据库,则创建表及其列(不仅是默认的移动应用程序列,还包括支持您定义的模型的列)更改它)应该像使用正确的 EF 数据库初始化策略一样简单。
您会注意到您的服务模板已为您创建了一个数据库初始值设定项,通常名为 MobileServiceInitializer
,可能继承自 CreateDatabaseIfNotExists<MobileServiceContext>
.
在开发时,将初始化程序使用的基类更改为 DropCreateDatabaseIfModelChanges<MobileServiceContext>
或DropCreateDatabaseAlways<MobileServiceContext>
(这将完全按照名称执行)将自动更改数据库以匹配您定义的模型(包括默认列)。
这应该为您提供开发时所需的东西,但如前所述,更长期的解决方案是采用 EF 迁移。您可以在这里了解更多信息:http://msdn.microsoft.com/en-us/data/jj591621.aspx
此外,正如 Adrian 提到的,您的 Region 类正在定义一个 Id 属性,该属性隐藏 EntityData 提供的实现并可能导致问题,因此建议删除它。
希望这会有所帮助!
关于c# - 如何将默认 Entity Framework 列添加到现有数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34769324/