Как использовать виртуальное свойство при инициализации анонимного типа Entity Framework - PullRequest
0 голосов
/ 24 октября 2018

При попытке заполнить базу данных я использую анонимный тип, подобный следующему:

context.CalibrationTargets.AddOrUpdate(x => new { calId = x.CalibrationSetup.Id, targetIndex = x.TargetIndex },
            new CalibrationTarget()...

Однако, поскольку CalibrationSetup является виртуальным свойством, похоже, я получаю сообщение об ошибке:

Выражение свойств x => new <>f__AnonymousType102(calId = x.CalibrationSetup.Id, targetIndex = x.TargetIndex) недопустимо.Выражение должно представлять свойство: C #: t => t.MyProperty VB.Net: Function(t) t.MyProperty.При указании нескольких свойств используйте анонимный тип: C #: t => new { t.MyProperty1, t.MyProperty2 } VB.Net: `Function (t) New With {t.MyProperty1, t.MyProperty2}

Также после прочтения этого поста Выражение свойств недопустимо.Выражение должно представлять свойство , проблема, по-видимому, заключается в том, что CalibrationSetup является свойством virtual.

Есть ли способ обойти это без необходимости заполнениябаза данных с другим Calibration_Id столбцом, который не virtual для использования в анонимном типе?

1 Ответ

0 голосов
/ 25 октября 2018

Трудно работать, не видя моделей, но для заполнения CalibrationTargets вы, вероятно, захотите что-то вроде ниже.Ваш синтаксис для AddOrUpdate также выглядит не так.У вас должны быть известные значения, с которыми вы собираетесь посеять.

context.CalibrationTargets.AddOrUpdate(
    x => x.CalibrationTargetId,  // This is the field that determines uniqueness 
    new CalibrationTarget
    {
        CalibrationTargetId = 1,  // if this is an identity column, omit and use a different field above for uniqueness
        TargetIndex = 99,  // what value for target index? Fixed value or variable can be used
        CalibrationSetup = new CalibrationSetup { Id = 77 }  // Same as above comment
    },
    new CalibrationTarget
    {
        CalibrationTargetId = 2,  // if this is an identity column, omit and use a different field above for uniqueness
        TargetIndex = 88,  // what value for target index? Fixed value or variable can be used
        CalibrationSetup = new CalibrationSetup { Id = 66 }  // Same as above comment
    }
    ... repeat for all seeded records
    );

context.SaveChanges();

Если выставлен FK CalibrationSetupId, вы можете упростить.

...