Ошибка индекса уже существует в EF 4.3 Code First с аннотациями данных

Я пытаюсь создать базу данных для выставления счетов с помощью Entity Framework 4.3, используя Code First с аннотациями данных, и каждый раз, когда я пытаюсь создать свою базу данных, я получаю сообщение об ошибке. Вот объекты, с которыми я имею дело:

public class ClientBase
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ClientID { get; set; }

    [Required]
    public string ClientName { get; set; }

    [Required]
    public bool IsActive { get; set; }

    [Required]
    public string ClientContactName { get; set; }

    [Required]
    public string ClientContactEmail { get; set; }

    public virtual List<PropertyBase> Communities { get; set; }
}

public class PropertyBase
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int PropertyID { get; set; }

    [ForeignKey("Client")]
    public int ClientID { get; set; }

    [Required, EnumDataType(typeof(BillingFrequency))]
    public BillingFrequency PropertyBillingFrequency { get; set; }

    [Required]
    public bool IsActive { get; set; }

    [Required]
    public string PropertyName { get; set; }

    public string PropertyStreet { get; set; }

    public string PropertyCity { get; set; }

    public string PropertyState { get; set; }

    public int PropertyZipCode { get; set; }

    public virtual ClientBase Client { get; set; }
}

Независимо от того, что я пытаюсь сделать, я всегда получаю эту ошибку:

The operation failed because an index or statistics with name 'IX_ClientID' already exists on table 'Property'.

Я видел решения этого вопроса с помощью Fluent API, но не нашел решения для аннотаций данных.

Кто-нибудь знает, как это исправить?

РЕДАКТИРОВАТЬ: Вот код в DbContext:

public DbSet<ClientBase> ClientBases { get; set; }
public DbSet<PropertyBase> PropertyBases { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        base.OnModelCreating(modelBuilder);
    }

person Corey Adler    schedule 03.05.2012    source источник
comment
Все это работает для меня. Я не понимаю, откуда в этой конфигурации берется table 'Property'.   -  person tzerb    schedule 04.05.2012
comment
Ой! Я забыл поставить [Table(Property)] над классом PropertyBase.   -  person Corey Adler    schedule 04.05.2012
comment
Может быть, на SQL-сервере запущен триггер, создавший индекс? Я понятия не имею, откуда он (даже первый) мог взяться.   -  person tzerb    schedule 04.05.2012
comment
Я думаю, вы это сделали, но пытались ли вы для начала убедиться, что у вас ничего нет в базе данных, и убедиться, что вы знаете, куда это «идет» (какая у вас конфигурация для подключения, defaultConnectionFactory и т. д.), где вы получаете ошибки? используя миграции, или пробовали с ним? Как вы вызываете контекст, инициализируете и т.д. Попробуйте сделать новый проект, новое подключение и т.д., т.е. начать с нуля...   -  person NSGaga-mostly-inactive    schedule 04.05.2012


Ответы (1)


Починил это. Оказалось, что я забыл, что был еще один созданный мной класс, который имел отношение внешнего ключа к ClientBase. Я забыл внести это в ClientBase как виртуальную собственность, и Entity Framework меня не устроил. Когда я включил его, он работал отлично.

Спасибо вам обоим за помощь!

person Corey Adler    schedule 04.05.2012