Может ли Entity Framework Code First сгенерировать правильно для System.Drawing.Font или словарей? - PullRequest
0 голосов
/ 02 марта 2012

Я пытаюсь сгенерировать CMS с использованием Entity Framework Code First.У меня есть класс TextBox, который я хотел бы иметь свойство System.Drawing.Font или свойство словаря.Может ли код Entity Framework сначала сгенерировать правильно для System.Drawing.Font или словарей?

Ответы [ 2 ]

0 голосов
/ 02 марта 2012

Entity Framework позволяет отображать только несколько предопределенных типов. Это потому, что это ORM, и поддерживаются типы данных, которые являются общими для многих СУБД. Однако вы можете разбить сложный тип, такой как Font, на его примитивные свойства и отобразить на сущность.

Например

public class Style
{
    public Guid ID {get; set;}
    public string FontName {get; set;}
    public int FontSize {get; set;}
    // other properties
}

В вашем слое пользовательского интерфейса будет TextBox, который будет использовать стиль для создания шрифта.

public class TextBox
{
    public TextBox(Style style)
    {
        Style = style;
    }
    protected Style Style {get; set;}

    public Font FontSize { get { return new Font(Style.FontName, Style.FontSize); } }
    // other properties
}
0 голосов
/ 02 марта 2012

EF CF - это ORM на основе кода (объектно-реляционный картограф).Он управляет хранением и извлечением данных, хранящихся в классах в вашем приложении, из таблиц в базе данных и из них.

Если вы хотите хранить / извлекать данные из ваших форм, вы должны создать «модельные» классы - это просто простые классы, которые содержат свойства для значений, которые вы хотите сохранить в вашей БД.Например:

public class Page
{
    public Guid ID {get; set;}
    public string Title {get; set;}
    public string Body {get; set;}
    public string FontName {get; set;}
    public int FontSize {get; set;}
}

Затем вы создаете класс DbContext, который содержит экземпляры DbSet типа классов вашей модели:

public class StorageContext : DbContext
{
    public DbSet<Page> Pages {get; set;}
}

Теперь EF определит структуру данныхВы хотите хранить и обрабатывать все операции с БД для загрузки / сохранения ваших данных в БД.

Вы должны быть в состоянии написать почти всю свою модель и код БД (в отдельной библиотеке на тот случай, если вам нужноповторное использование).

Примечание: я также настоятельно рекомендую вам добавить дополнительный уровень абстракции и создать класс репозитория, чтобы ваш код пользовательского интерфейса ничего не знал о том, КАК вы храните свои данные - это позволит вам перейти напозже совершенно другой движок хранилища, не касаясь кода вашего приложения!Например:

public class PageRepo
{
    StorageContext _ctx = new StorageContext();

    public Page GetPageById(Guid id)
    {
        ...
    }

    public void StorePage(Page page)
    {
        ...
    }
}

Затем вы используете классы StorageContext (или, что еще лучше, ваш репозиторий) и классы Model для получения / хранения данных из / в вашу БД и копирования этих значений в необходимые поля в ваших формахконечно же, перед проверкой данных перед сохранением данных;)

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...