#c# #sql #entity-framework #indexing
#c# #sql #entity-framework #индексирование
Вопрос:
Я прихожу сегодня из-за проблем с производительностью, которые у меня есть. Сейчас я работаю над индексами, однако я не могу найти правильный способ поместить индекс во все наследования классов.. У меня есть этот фрагмент кода:
public abstract class BaseEntityWithId
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; } = new Guid();
[Required]
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
public DateTimeOffset? UpdatedAt { get; set; } = DateTimeOffset.UtcNow;
}
[Table("AccountExampleEntity")]
public class AccountExampleEntity : BaseEntityWithId
{
public string UserName { get; set; }
public string Password { get; set; }
public Guid UserId { get; set; }
public Guid DeviceId { get; set; }
[ForeignKey("UserId")]
public virtual UserEntity User { get; set; }
[ForeignKey("DeviceId")]
public virtual DeviceEntity Device { get; set; }
}
На основе этого кода Azure создает предупреждение и сообщает мне следующее:
- Тип индекса
- НЕКЛАСТЕРИЗОВАННЫЙ
- Схема
- [dbo]
- Таблица
- [AccountExampleEntity]
- Ключевые столбцы индекса
- [Идентификатор пользователя]
- Включенные столбцы
- [createdAt], [DeviceID], [updatedAt]
Итак, основываясь на этом, я хочу создать индекс, который я разделю на эти 4 свойства, однако я не могу найти правильный способ достичь этого .. Единственный способ, который я нашел, это воссоздать свойство, «скрыв унаследованные элементы». Это код:
[Table("AccountExampleEntity")]
public class AccountExampleEntity : BaseEntityWithId
{
public string UserName { get; set; }
public string Password { get; set; }
[Index("AccountExampleIndex", Order = 1)]
public Guid UserId { get; set; }
[Index("AccountExampleIndex", Order = 2)]
public Guid DeviceId { get; set; }
[Index("AccountExampleIndex", Order = 3)]
public new DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
[Index("AccountExampleIndex", Order = 4)]
public new DateTimeOffset? UpdatedAt { get; set; } = DateTimeOffset.UtcNow;
[ForeignKey("UserId")]
public virtual UserEntity User { get; set; }
[ForeignKey("DeviceId")]
public virtual DeviceEntity Device { get; set; }
}
Это правильный способ сделать это или нет? Я ничего не смог найти в stackoverflow и EF6, когда проверял в прошлый раз, но сегодня я снова вхожу в это, и мне нужно знать 🙂
Спасибо за помощь!