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));