EF и превышение длины строки

300
22 мая 2017, 23:48

Я создал модель данных DataBase-First, при этом в базе данных есть поля на подобии varchar(150). В классе же такие поля выглядят как просто string. И при сохранении изменений cnt.SaveChanges(), если значение строки больше 150 символов, возникает исключение "Validation failed for one or more entities. See 'EntitiyValidationErrors' property for more details". В подробностях ошибки и написано, что поле Name должно иметь тип строки или массива с максимальной длиной 150.

Можно ли узнать для текстовых полей их размер в базе данных средствами C# и обрезать строку? Или как-то "отключить" данные ошибки сохранения (чтобы EF сам обрезал строки)?

Answer 1

Можете попробовать получить параметры полей БД из метаданных:

public static int? GetMaxLength(this EntityObject entite, string nomPropriete)
    {
        int? result = null;
        using (XEntities contexte = XEntities.GetCurrentContext())
        {
            var queryResult = from meta in contexte.MetadataWorkspace.GetItems(DataSpace.CSpace)
                               .Where(m => m.BuiltInTypeKind == BuiltInTypeKind.EntityType)
                              from p in (meta as EntityType).Properties
                                 .Where(p => p.DeclaringType.Name == entite.GetType().Name
                                     && p.Name == nomPropriete
                                     && p.TypeUsage.EdmType.Name == "String")
                              select p.TypeUsage.Facets["MaxLength"].Value;
            if (queryResult.Count() > 0)
            {
                result = Convert.ToInt32(queryResult.First());
            }
        }
        return result;
    }
READ ALSO
C#, OpenXML, формула IF

C#, OpenXML, формула IF

Для создания файла Excel использую OpenXMLВ файле Excel нужна формула IF(

299
Конвертирование памяти для видеокарты

Конвертирование памяти для видеокарты

Есть ли более оригинальных способ вывести для каждой видеокарты свой объём памяти?

397
Вывод текст из DataGridView в Label

Вывод текст из DataGridView в Label

Как вывести текст из ячейки DataGridView в Label? Те

453
Поиск клонов по ip

Поиск клонов по ip

Есть таблица с пользователямиЗаписываю в колонку iplast записываю последние входы ip

201