2017-01-14 12 views
2

Я использую EF 6.1.3 и получил эту ошибку.Entity Framework Fluent API: объект типа 'IndexAttribute' не может быть сериализован с помощью IndexAnnotationSerializer.

«Объект типа« IndexAttribute »не может быть сериализован с помощью IndexAnnotationSerializer. Объекты« IndexAnnotation »могут быть сериализованы».

Вот один из конфигурационных файлов

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Data.Entity.Infrastructure.Annotations; 
using System.Data.Entity.ModelConfiguration; 
using System.Linq; 
using System.Web; 
using MasterDetails.Models; 

namespace MasterDetails.DataLayer 
{ 
    public class InventoryItemConfiguration :  EntityTypeConfiguration<InventoryItem> 
{ 
    public InventoryItemConfiguration() 
    { 
     Property(ii => ii.InventoryItemCode) 
      .HasMaxLength(15) 
      .IsRequired() 
      .HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("AK_InventoryItem_InventoryItemCode") { IsUnique = true })); 

     Property(ii => ii.InventoryItemName) 
      .HasMaxLength(80) 
      .IsRequired() 
      .HasColumnAnnotation("Index", new IndexAttribute("AK_InventoryItem_InventoryItemName") { IsUnique = true }); 

     Property(ii => ii.UnitPrice) 
      .HasPrecision(18, 2); 
    } 
} 
} 

ответ

3

Исключение вызывается следующей строкой

.HasColumnAnnotation("Index", new IndexAttribute("AK_InventoryItem_InventoryItemName") { IsUnique = true }); 

Вам нужно обернуть IndexAttribute внутри IndexAnnotation (как вы уже правильно сделали для другой колонки InventoryItemCode):

.HasColumnAnnotation("Index", new IndexAnnotation(
    new IndexAttribute("AK_InventoryItem_InventoryItemName") { IsUnique = true })); 
1

Replace следующий код:

.HasMaxLength(50) 
.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("AK_InventoryItem_InventoryItemName", 2) { IsUnique = false })); 

и удалить .IsRequired()

IndexAttribute Имеет две перегрузки, вторая перегрузка порядок.

+0

.IsRequired нормально , :) Вы можете использовать его. – InsParbo