ServiceStack OrmLite, получающий ошибку Invalid ColumnName, когда столбец действительно существует в базе данных

1

У меня есть класс, который выглядит следующим образом:

public class EmployeeHistory
    {       
        public int EmployeeHistoryId { get; set; }    
        public int TitleId { get; set; }    
        public int EmployeeId { get; set; }    
        public bool IsDeleted { get; set; }          
        public int GeographyId { get; set; }           
        public Geography Geography { get; set; }             
        public Title Title { get; set; }         
        public DateTime StartDate { get; set; }    
        public DateTime EndDate { get; set; }
    }

и я пытаюсь сопоставить его с таблицей DB, которая выглядит следующим образом:

CREATE TABLE [Data].[EmployeeHistory](
    [EmployeeHistoryId] [int] IDENTITY(1,1) NOT NULL,
    [EmployeeId] [int] NOT NULL,
    [GeographyId] [int] NULL,
    [TitleId] [int] NULL,
    [IsDeleted] [bit] NOT NULL,
    [IsActive]  AS (case when [EndDate] IS NULL then (1) else (0) end),
    [StartDate] [date] NOT NULL,
    [EndDate] [date] NULL,
    [CreatedDate] [datetime] NOT NULL,
    [CreatedBy] [int] NOT NULL,
    [ModifiedDate] [datetime] NOT NULL,
    [ModifiedBy] [int] NOT NULL

Ниже приведен краткий обзор проблемы: ORMLite умеет сериализовать EmployeeId, TitleId, EmployeeHistoryId правильно, но он выдает ошибку "Недопустимое имя столбца" при попытке сериализации GeographyId и, StartDate, EndDate. Я не уверен, есть ли разница между полями, которые он может сериализовать, и полями, которые он не может сериализовать. А также у меня никогда не было проблемы с сериализации в ORMLite. Не уверен, что я пропущу на этот раз?

Просто добавьте некоторые детали. Это также случилось с другой таблицей, над которой я работаю, и снова, даже несмотря на то, что столбец явно существует в таблице, он отказывается распознавать столбец и выдает ошибку "Недопустимое имя столбца",

  • 0
    Не могли бы вы указать, к какому типу базы данных подключается OrmLite при возникновении этой проблемы? Например, Sqlite, SqlServer? Кроме того, GeographyId должен быть int? если это обнуляемый и DateTime? для обнуляемых дат. Также может помочь любая дополнительная информация о том, когда это происходит, например, db.Select <EmployeeHistory> () и, если возможно, включить stacktrace.
Теги:
orm
ormlite-servicestack
servicestack

2 ответа

1
Лучший ответ

На самом деле, это был небольшой облом с моей стороны. Оказалось, что стол, что я имею в виду принадлежит к определенной схеме в БД и по умолчанию ORMLite выглядит для вещей в схеме DBO. Однако на этот раз схема была DATA вместо Dbo, и она начала сбой, потому что в схеме Dbo она не нашла ничего, что называется EmployeeHistory.

Я обнаружил, что это легко решить, украсив ваш класс атрибутом [Schema ("SchemaName")].

2

Убедитесь, что вы не игнорировали это поле в ModelDefinition OrmLite. Ниже приведена часть метода, который я написал для определения Ignore Field.

 ModelDefinition definition = GetModelDefinition(typeof(T));

        if (definition == null)
            return this;

        string fieldName = selector.GetPropertyName();
        FieldDefinition field = definition.GetFieldDefinition(fieldName);

        if (field != null) {
            definition.FieldDefinitions.Remove(field);
            definition.IgnoredFieldDefinitions.Add(field);
            definition.AfterInit();
        }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню