Значение из базы данных не читается - PullRequest
0 голосов
/ 07 мая 2019

Использование EntityFramework 6.2.0

Моя модель выглядит следующим образом:

<Table("Invoice_Totals")>
Public Class Invoice

    <Key>
    <Column("Invoice_Number")>
    Public Property IntegrationKey As Int64

    <Column("CustNum")>
    Public Property CustomerKey As String = String.Empty

    <Column("DateTime")>
    Public ReadOnly Property CreatedTime As DateTime


    <Column("Grand_Total")>
    Public Property Price As Decimal = Decimal.MaxValue

    <Column("Amt_Tendered")>
    Public Property Payment As Decimal = 0

    <Column("Amt_Change")>
    Public Property PaymentChange As Decimal = 0

End Class

Этот запрос:

Using database As PosModels.PosDatabase = PosModels.PosDatabase.CreateWithNoProxies
    Dim q As IQueryable(Of PosModels.Invoice) = database.Invoices
    posInvoices = q.ToList
End Using

создает этот SQL:

SELECT 
    [Extent1].[Invoice_Number] AS [Invoice_Number], 
    [Extent1].[CustNum] AS [CustNum], 
    [Extent1].[Grand_Total] AS [Grand_Total], 
    [Extent1].[Amt_Tendered] AS [Amt_Tendered], 
    [Extent1].[Amt_Change] AS [Amt_Change]
    FROM [dbo].[Invoice_Totals] AS [Extent1]

Как видите, столбец [DateTime] не включен в запрос.Я предполагаю, потому что «DateTime» является ключевым словом / типом данных SQL.Есть ли способ заставить EF правильно выполнить этот запрос?

Даже при выполнении запроса "вручную" средство отображения объектов не появляется:

posInvoices = database.Database.SqlQuery(Of PosModels.Invoice)($"
                SELECT 
                    [Extent1].[Invoice_Number] AS [IntegrationKey], 
                    [Extent1].[CustNum] AS [CustomerKey], 
                    [Extent1].[DateTime] AS [CreatedTime],
                    [Extent1].[Grand_Total] AS [Price], 
                    [Extent1].[Amt_Tendered] AS [Payment], 
                    [Extent1].[Amt_Change] AS [PaymentChange]
                    FROM [dbo].[Invoice_Totals] AS [Extent1]
            ").ToList

Это все еще незаполните любые значения для свойства CreatedTime.Как и в предыдущем запросе, все значения в модели остаются на DateTime.MinValue.Самые старые данные в базе данных с 2011 года.

1 Ответ

1 голос
/ 07 мая 2019

Вы объявили это как свойство ReadOnly

 Public ReadOnly Property CreatedTime As DateTime

Это означает, что только конструктор может установить его.EF Core поддерживает Backing Fields , которые можно использовать для реализации свойств только для чтения.Но в EF6 все сопоставления свойств со столбцами базы данных должны быть доступны для чтения / записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...