c# - 如何将默认 Entity Framework 列添加到现有数据库

标签 c# entity-framework azure azure-mobile-services

我正在使用 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/

相关文章:

azure - 使用参数索引 Bicep 中的 JSON 对象

java - 有没有办法使用 azure 用户名和密码以编程方式获取 azure AD 客户端 key ?

entity-framework - Entity Framework CTP4 非标准主键名称在 BaseEntity 中的使用

azure - Azure 数据工厂中的事件触发器

c# - Entity Framework 中的表值函数?

C# - 方法签名中的通用类型 - 为什么是 CS1503, "Cannot Convert from IThing to ns.IThing"?

database - 将 3 个表关系映射到单个实体。 ORM 最佳实践?

c# - 使用多字段过滤概念化高级 linq 查询

c# - 在下拉列表中仅显示一个特定值

c# - 单元测试自动映射器