Подтвердить что ты не робот

HasKey Throwing InvalidOperationException - Является ли это ошибкой в ​​коде Entity Framework First?

Хорошо, я смотрел на экран в течение нескольких часов здесь и понятия не имею, почему я получаю эту ошибку. Я использовал Code First в ряде других проектов и не имел проблем с этим раньше...

Вот ошибка:

System.InvalidOperationException was unhandled by user code
  Message=The properties expression 'sci => sci.ShoppingCartItemId' is not valid. The expression should represent a property: C#: 't => t.MyProperty'  VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new { t.MyProperty1, t.MyProperty2 }'  VB.Net: 'Function(t) New From { t.MyProperty1, t.MyProperty2 }'.
  Source=EntityFramework
  StackTrace:
       at System.Data.Entity.ModelConfiguration.Utilities.ExpressionExtensions.GetSimplePropertyAccessList(LambdaExpression propertyAccessExpression)
       at System.Data.Entity.ModelConfiguration.EntityTypeConfiguration`1.HasKey[TKey](Expression`1 keyExpression)
       at BillingPlatform.DataLayer.BillingDb.OnModelCreating(DbModelBuilder modelBuilder) in [somepath]\BillingDb.cs:line 57
       at System.Data.Entity.Internal.LazyInternalContext.CreateModelBuilder()
       at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
       at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
  InnerException: 

Вот код, который выдает ошибку. Первая строка:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{                       
   modelBuilder.Entity<ShoppingCartItem>().HasKey(sci => sci.ShoppingCartItemId);
   modelBuilder.Entity<Product>().HasKey<Guid>(p => p.ProductId);
   modelBuilder.Entity<DependentItemType>().HasKey<Guid>(dit => dit.DependentItemTypeId);
   modelBuilder.Entity<ProductCategory>().HasKey<Guid>(pc => pc.ProductCategoryId);

   base.OnModelCreating(modelBuilder);
}

Вот только класс ShoppingCartItem в качестве ссылки:

namespace BillingPlatform.Libraries
{
    public class ShoppingCartItem
    {
        /// <summary>
        /// The unique identifier of this shopping cart item.
        /// </summary>        
        public Guid ShoppingCartItemId { get; set; }

        public Product Product { get; set; }

        public decimal Price { get; set; }

        public decimal Tax { get; set; }

        public Guid UserId { get; set; }

        public bool InCart { get; set; }

        public string ProductData { get; set; }

        public DependentItemType DependentItemType { get; set; }

        public string DependentItemId { get; set; }
    }
}

Кто-нибудь понимает, почему Entity Framework выбрасывает эту ошибку? Мое выражение лямбда:

modelBuilder.Entity<ShoppingCartItem>().HasKey(s => s.ShoppingCartItemId);

супер просто. Я не вижу, что может быть неправильным... Спасибо за любую помощь, которую вы можете дать!

4b9b3361

Ответ 1

Хорошо, проблема в том, что мои члены класса были изначально просто полями. Код Сначала ожидает свойства. После внесения изменений и перестройки кода я все еще получал ту же ошибку. Но как только Visual Studio была вынуждена выдвигать обновленные библиотеки DLL, все работало нормально.

Ответ 2

Не здесь (приземлился здесь из поиска Google), но, возможно, стоит опубликовать, что это точное исключение также может возникнуть, если HasKey использует анонимный тип, который определяет его собственные имена полей:

HasKey(t => new { KeyField1 = t.KeyField1, KeyField2 = t.KeyField2 });

Должно быть зафиксировано так:

HasKey(t => new { t.KeyField1, t.KeyField2 });