Entity Framework 5 кодирует первую строку карты в varchar глобально

Я играю с EF 5 и первым. Пока мне это очень нравится, но я заметил, что по умолчанию строковые столбцы соответствуют nvarchar. Если я хочу использовать varchar, то я должен явно указать это.

Я могу заставить его использовать varchar вместо nvarchar для строк следующим образом:

public class Member
{
    public int id { get; set; }

    [MaxLength(255), Required, Column(TypeName = "varchar")]
    public string firstName { get; set; }

    [MaxLength(255), Required, Column(TypeName = "varchar")]
    public string surname { get; set; }
}

Я бы обычно использовал varchar вместо nvarchar почти во всех случаях, поэтому я бы предпочел иметь строковые столбцы, глобально сопоставленные с varchar, и иметь возможность устанавливать nvarchar на основе столбца, как указано выше, если мне нужно.

Кто-нибудь знает, как это сделать? Я пытаюсь опустить необходимость ввода [Column (TypeName = "varchar" )] для каждого столбца строки в моей модели.

Ответ 1

на EF 6 вы можете использовать это, чтобы сопоставить каждое свойство строки, чтобы использовать varchar вместо nvarchar

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Properties()
            .Where(x =>
                x.PropertyType.FullName.Equals("System.String") &&
                !x.GetCustomAttributes(false).OfType<ColumnAttribute>().Where(q => q.TypeName != null && q.TypeName.Equals("varchar", StringComparison.InvariantCultureIgnoreCase)).Any())
            .Configure(c =>
                c.HasColumnType("varchar"));
    }

Ответ 2

Вы должны написать это как:

[Column(TypeName = "VARCHAR")]
public string firstName { get; set; }

Для получения дополнительной информации см. ссылку

Ответ 3

Или

modelBuilder.Properties<string>().Configure(c => c.IsUnicode(false));