EF и пользовательские поля. Как реализовать?
От: Аноним  
Дата: 03.01.14 09:28
Оценка:
Hi!

Нужен совет как лучше реализовать следующий функционал.
Есть таблица в БД tblContact с полями контакта (ID, FirstName, LastName, Phone etc).
Таблица мапится на сущность Contact.

Теперь заказчик хочет, чтоб у пользователя была возможность самому в программе создавать дополнительные любые поля у контакта.
Например Birthday, Phone2, Email3 и т.д.
Имя и тип нового поля задаёт пользователь.

В принципе такой функционал я видел в нескольких CRM.

Как это лучше реализовать? Как такие поля лучше хранить в БД и как их мапить с помощью EF?

Спасибо.
Re: EF и пользовательские поля. Как реализовать?
От: Аноним  
Дата: 03.01.14 10:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Hi!


А>Нужен совет как лучше реализовать следующий функционал.

А>Есть таблица в БД tblContact с полями контакта (ID, FirstName, LastName, Phone etc).
А>Таблица мапится на сущность Contact.

А>Теперь заказчик хочет, чтоб у пользователя была возможность самому в программе создавать дополнительные любые поля у контакта.

А>Например Birthday, Phone2, Email3 и т.д.
А>Имя и тип нового поля задаёт пользователь.

А>В принципе такой функционал я видел в нескольких CRM.


А>Как это лучше реализовать? Как такие поля лучше хранить в БД и как их мапить с помощью EF?


А>Спасибо.


Можно так:

 class Field
  {
    public strang Name{get;set;}

    public strina Value{get;set;}

    public FieldType Type{get;set;}
  }

 enum FieldType
{
  Email,
  
  Phone
}


Можно еще сделать иерархию классов Field. По разному можно, зависит от задачи.
Re[2]: EF и пользовательские поля. Как реализовать?
От: Аноним  
Дата: 03.01.14 10:31
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Можно так:


А>
А> class Field
А>  {
А>    public strang Name{get;set;}

А>    public strina Value{get;set;}

А>    public FieldType Type{get;set;}
А>  }

А> enum FieldType
А>{
А>  Email,
  
А>  Phone
А>}
А>


А>Можно еще сделать иерархию классов Field. По разному можно, зависит от задачи.


Спасибо за ответ

У меня куча вопросов

То есть в БД будет 1 таблица с полями Name, Value, Type, ContactID?
Value — всегда string? — а как быть с типизацией (DateTime, int, bool)?

Как это будет связано с сущностью Contact? — у Contact будет List<Field> ?

У нас Contact часто отображается в гридах — как тогда вывести эти пользовательские колонки в грид? — как быть с их типом, если они все string грид не сможет их ни фильтровать правильно ни сортировать...
Re[3]: EF и пользовательские поля. Как реализовать?
От: Аноним  
Дата: 03.01.14 10:45
Оценка:
А>Спасибо за ответ

А>У меня куча вопросов


А>То есть в БД будет 1 таблица с полями Name, Value, Type, ContactID?

Да
А>Value — всегда string? — а как быть с типизацией (DateTime, int, bool)?
Можно сделать иерархию, можно в Value использовать object а не string.
А>Как это будет связано с сущностью Contact? — у Contact будет List<Field> ?
Да
А>У нас Contact часто отображается в гридах — как тогда вывести эти пользовательские колонки в грид? — как быть с их типом, если они все string грид не сможет их ни фильтровать правильно ни сортировать...
Сортировать по enum FieldType. Вообще в гриде я думаю следует отображать тип поля, что бы пользователь знал какие данные можно вводить, ведь email != phone.
Re[3]: EF и пользовательские поля. Как реализовать?
От: Аноним  
Дата: 03.01.14 11:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:



А>Value — всегда string? — а как быть с типизацией (DateTime, int, bool)?

В БД — очевидно, да. В приложении всегда можно делать конвертацию когда надо.

А>У нас Contact часто отображается в гридах — как тогда вывести эти пользовательские колонки в грид? — как быть с их типом, если они все string грид не сможет их ни фильтровать правильно ни сортировать...


При добавлении колонки в грид обфчно можно указать её тип.

Если хочется использовать databinding, то можно соорудить что-то в таком духе.
Гриду в качестве коллекции можно подсовывать ITypedList, который через GetItemProperties возвращает описания свойств элемента коллекции в виде PropertyDescriptor. Через PropertyDescriptor в свою очередь можно реализовать произвольные PropertyType, GetValue, SetValue и прочие полезности.
Re[4]: EF и пользовательские поля. Как реализовать?
От: Аноним  
Дата: 03.01.14 12:19
Оценка:
Здравствуйте, Аноним, Вы писали:


А>>У нас Contact часто отображается в гридах — как тогда вывести эти пользовательские колонки в грид? — как быть с их типом, если они все string грид не сможет их ни фильтровать правильно ни сортировать...

А>При добавлении колонки в грид обфчно можно указать её тип.

Только при этом нужно ещё и чтоб и данные в ячейках грида имели тип колонки а не стринг. Т.е. надо когда-то их конвертировать...

А>Если хочется использовать databinding, то можно соорудить что-то в таком духе.

А>Гриду в качестве коллекции можно подсовывать ITypedList, который через GetItemProperties возвращает описания свойств элемента коллекции в виде PropertyDescriptor. Через PropertyDescriptor в свою очередь можно реализовать произвольные PropertyType, GetValue, SetValue и прочие полезности.

Интересная ссылка, не знал такого, спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.