2014-01-26 4 views
2

Я использую рамки сущности код Fisrt позволяет сказать, что это мои классы:код первым добавить свойства во время выполнения

public class Class1 
{ 
    public string property1{get;set;} 
    public string property2{get;set;} 
} 

У меня есть требование, чтобы реализовать, что пользователь может добавить «динамические свойства» в моей рамочной сущности коды первые классы , но без изменения модели и извлечения базы данных! это имеет смысл? как бы вы выполнили это требование? Для меня очень важно это понять, потому что в моей реальной модели у меня есть, может быть, 30 классов, и я хочу понять, что это лучшая стратегия для ее реализации или сказать моим клиентам, что это требование слишком сложно и ненадежно для воплощать в жизнь.

+1

Остерегайтесь! Это очень распространенное требование! Здесь вы описываете модель EAV (значение атрибута сущности). Это не тривиально (но выполнимо), чтобы реализовать это. Если это требование относится к категории «приятно иметь», попробуйте решить эту проблему, добавив некоторые фиксированные «анонимные» свойства (например, «Property01, Property02, ...») и назначьте заголовок во время выполнения. Нехорошо, но меньше работы. Но, в конце концов, возможно, это всего лишь призыв к лучшей нормализации вашей модели. –

+1

Возможный дубликат http://stackoverflow.com/questions/5497153/can-entityframework-support-an-eav-model –

+0

Вы ищете что-то вроде Azure Mobile Services Table, где вы можете изменить таблицу во время выполнения, добавить, удалить столбцы как вам нужно? (динамическая схема) –

ответ

1

Вы можете создать одно свойство String в таблице и JSON-сериализовать пользовательский объект, который содержит в себе «динамические» свойства.

-

public class Class1 
{ 
    public string property1{get;set;} 
    public string property2{get;set;} 
    public string CustomProperties { get; set; } 
} 

Затем в коде у вас есть какой-то словарь или что-то, где вы указываете имя свойства и его значение:

Dictionary<string, object> customProperties; 

После заполнения этих свойств с «динамическими» данными, вы просто сериализуйте его в строку (используя JSON, XML и т. д.) и сохраните ti в поле CustomProperties в таблице.

Поэтому, когда вам нужно прочитать эти свойства, вы просто десериализуете его и читаете нужное значение.

+0

Можете ли вы объяснить свой ответ Я не понял –

Смежные вопросы