2017-11-08 1 views
0

데이터베이스 첫 번째 모델로 내 XamarinForm에서 AzureMobileClient를 사용자로 보려고합니다. 지금은 오프라인 동기화를 사용하지 않습니다. 그래서 난 내 AZURE SQL DB에 테이블을 작성하려면이 스크립트를 사용AzureMobileClient DatabaseFirst 수동으로 데이터 테이블 생성 실패?

CREATE TABLE [dbo].[TodoItems] (
-- This must be a string suitable for a GUID 
[Id]   NVARCHAR (128)  NOT NULL, 

-- These are the system properties 
[Version]  ROWVERSION   NOT NULL, 
[CreatedAt]  DATETIMEOFFSET (7) NOT NULL, 
[UpdatedAt]  DATETIMEOFFSET (7) NULL, 
[Deleted]  BIT    NOT NULL, 

-- These are the properties of our DTO not included in EntityFramework 
[Text]   NVARCHAR (MAX)  NULL, 
[Complete]  BIT    NOT NULL, 
); 

CREATE CLUSTERED INDEX [IX_CreatedAt] 
ON [dbo].TodoItems([CreatedAt] ASC); 

ALTER TABLE [dbo].[TodoItems] 
ADD CONSTRAINT [PK_dbo.TodoItems] PRIMARY KEY NONCLUSTERED ([Id] ASC); 

CREATE TRIGGER [TR_dbo_TodoItems_InsertUpdateDelete] ON [dbo].[TodoItems] 
AFTER INSERT, UPDATE, DELETE AS 
BEGIN 
    UPDATE [dbo].[TodoItems] 
     SET [dbo].[TodoItems].[UpdatedAt] = CONVERT(DATETIMEOFFSET, 
       SYSUTCDATETIME()) 
     FROM INSERTED WHERE inserted.[Id] = [dbo].[TodoItems].[Id] 
END; 

하늘빛에서 제공하는 샘플 ToDoItem을 기준으로합니다. 어떤 버그없이 GetAllItems를 할 수 있습니다 (테이블은 지금 비어 있습니다). 나는 나의 푸른 백엔드에이 오류가있어 항목을 삽입 할 때 : 자동으로 돌봐

{[Message, The operation failed with the following error: 'Cannot insert the value NULL into column 'CreatedAt', table 'TechCenterCentaur.dbo.TodoItems'; column does not allow nulls. INSERT fails.The statement has been terminated.'.]} 

일반적으로 하늘빛을 가정한다?

TodoItem cl = new TodoItem(); 
cl.Name = "Test"; 

await _todoTable.InsertAsync(cl); 

호출

잘에만 테스트 및 다른 모든 필드가 null 인을 포함하는 ToDoItem을 함께 백엔드로 구성되어 있습니다

난 그냥 내 XF 코드에 그렇게. 백엔드에서 예외가 발생했습니다.

public async Task<IHttpActionResult> PostTodoItem(TodoItem item) 
{ 
    try 
    { 
    TodoItem current = await InsertAsync(item); //crash here 
    return CreatedAtRoute("Tables", new { id = current.Id }, current); 
    } 
    catch (System.Exception e) 
    { 

    throw; 
    } 
} 

의견이 있습니까?

답변

0

좋아 해결책을 찾았습니다. 문제는 내 SQL 테이블에있었습니다. ID 및 CreatedDate에 대한 새 GUID에 대해 2 ALTER TABLE이 누락되었습니다. 여기

나의 새로운 스크립트를

USE [TechCenterCentaur] 
GO 

/****** Object: Table [dbo].[TodoItems] Script Date: 2017-11-08 11:09:14 
    ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[TodoItems](
    [Id] [nvarchar](128) NOT NULL, 
    [Text] [nvarchar](max) NULL, 
    [Complete] [bit] NOT NULL, 
    [Version] [timestamp] NOT NULL, 
    [CreatedAt] [datetimeoffset](7) NOT NULL, 
    [UpdatedAt] [datetimeoffset](7) NULL, 
    [Deleted] [bit] NOT NULL, 
CONSTRAINT [PK_dbo.TodoItems] PRIMARY KEY NONCLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
) 

GO 

ALTER TABLE [dbo].[TodoItems] ADD DEFAULT (newid()) FOR [Id] 
GO 

ALTER TABLE [dbo].[TodoItems] ADD DEFAULT (sysutcdatetime()) FOR 
     [CreatedAt] 
GO 

CREATE TRIGGER [TR_dbo_TodoItems_InsertUpdateDelete] ON [dbo].[TodoItems] 
AFTER INSERT, UPDATE, DELETE AS 
BEGIN 
    UPDATE [dbo].[TodoItems] 
     SET [dbo].[TodoItems].[UpdatedAt] = CONVERT(DATETIMEOFFSET, 
      SYSUTCDATETIME()) 
     FROM INSERTED WHERE inserted.[Id] = [dbo].[TodoItems].[Id] 
END; 
GO 
관련 문제