如何将默认实体框架列添加到现有数据库中
本文关键字:数据库 添加 默认 实体 框架 | 更新日期: 2023-09-27 18:30:04
我正在使用Entity Framework
创建MVC Azure mobile application service
我创建了一个类似的Entity Model
:
public class Regions : EntityData
{
public string Id { get; set; }
public string Name { get; set; }
}
我已经创建了一个TableController,所以我通过向发出get请求来进行查询
http://localhost:3000/tables/Regions
这返回一个错误:
"exceptionMessage":"无效的列名'Id'。''r''n无效的列名"版本"。''''r''n列名"CreatedAt"无效。''''r''n列名"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]''
所以我的问题是,如何将这些列添加到我已经存在的数据库中,以便我的mobile app service
能够工作?
PS这与我之前在这里问的一个问题的评论有关
如果这是针对一个新服务,而您没有使用现有数据库,那么创建表及其列(不仅是默认的Mobile Apps列,还有在更改模型时支持模型的列)应该和使用正确的EF数据库初始化策略一样简单。
您会注意到,您的服务模板为您创建了一个数据库初始值设定项,通常命名为MobileServiceInitializer
,它可能继承自CreateDatabaseIfNotExists<MobileServiceContext>
。
在开发过程中,将初始化器使用的基类更改为DropCreateDatabaseIfModelChanges<MobileServiceContext>
或DropCreateDatabaseAlways<MobileServiceContext>
(这将完全按照名称所示执行)将自动更改数据库以匹配您定义的模型(包括默认列)。
这应该会在开发时为您提供所需的内容,但如前所述,一个更长期的解决方案是采用EF迁移。您可以在此处了解更多信息:http://msdn.microsoft.com/en-us/data/jj591621.aspx
此外,正如Adrian所提到的,Region类正在定义一个Id属性,该属性隐藏了EntityData提供的实现,可能会导致问题,因此建议删除它。
我希望这能有所帮助!
[Id] [nvarchar](255) Default (CONVERT([nvarchar](255),newid(),(0))) NOT NULL Primary Key,
[CreatedAt] [datetimeoffset](3) DEFAULT CONVERT([datetimeoffset](3),sysutcdatetime(),(0)) NOT NULL,
[UpdatedAt] [datetimeoffset](3) DEFAULT CONVERT([datetimeoffset](3),sysutcdatetime(),(0)) NOT NULL,
[Version] [timestamp] NOT NULL,
[Deleted] [bit] DEFAULT 0 NULL,
您的id正在覆盖EntityData对象中的定义。此外,您的SQL数据库没有其他必需的字段。我假设您没有进行迁移,所以数据库没有用新定义进行更新。