0

Мне нужно создать модель с динамическим выбором источника данных в качестве свойства модели (код сначала из базы данных. Код-второй).Включение зависимости для выбора локальных и удаленных данных

class MyModel{ 
public int MyModelId {get; set;} 
... 
public int PropertyId {get;set;} 
public virtual Property Property {get;set;} // this what I need to choose. 
... 

Свойства должен быть получить из таблицы свойств из базы данных, если в файл конфигурации он установлен <property>remote</property> и из локального контейнера с таким же структурированным, как из базы данных, если <property>local</property>.

class Property{ 
    public int PropertyId {get;set} 
    public string name {get;set;} 
    public virtual ICollection<MyModel> MyModels {get;set;} 
    public Property() 
    { 
     MyModels = new List<Model>(); 
    } 
} 

и локальные данные, как

List<Property> lProperty = new List<Property>() 
{{PropertyId = 1,name = "val1"}, 
{PropertyId = 2,name = "val2"}, 
{PropertyId = 3,name = "val3"} ...} 
+0

Есть ли у вас такое же ужасное форматирование в вашем код? – abatishchev

ответ

1

В этом случае вы должны отказаться от EF отношений и написать что-то вроде этого:

public class MyModel 
{ 
    public int MyModelId { get; set; } 

    //PropertyId now is not real FK to PropertyTable at DB it is just another column, 
    //but it still will store reference to Property 
    public int? PropertyId { get; set; } 

    [NotMapped] 
    public Property Property 
    { 
     get 
     { 
      if (PropertyId.HasValue) 
      { 
       if (ForExampleStaticClass.config("property") == "remote") 
        using (var context = new Context()) 
        { 
         return context.PropertyTable.Where(x => x.PropertyId == PropertyId.Value).FirstOrDefault(); 
        } 
       else 
        return ForExampleStaticClass.lProperty.Where(x => x.PropertyId == PropertyId.Value).FirstOrDefault(); 
      } 
      else 
       return null; 
     } 
     set 
     { 
      //I consider that Property(value) already exists at DB and/or Local Storage.       
      PropertyId = value.PropertyId; 
     } 
    } 
} 

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

  • Нет связанных вопросов^_^