Хранение частной собственности Models с MVC и EF4 - PullRequest
0 голосов
/ 03 июля 2011

Придуманный пример, но с помощью 'code first' EF4 я могу сохранить в базе данных частное свойство.

Например, если мы не хотим, чтобы вызывающая сторона знала текущий BarCount или максимальный диапазон: -

    public class Foo
    {        
        public string FooName { get; set; }

        // How to ensure this is stored in DB?
        private int BarCount { get; set; }

        public void IncBarCount()
        {
            BarCount++;
        }

        public bool IsBarCountInRange()
        {
            return BarCount < 10;
        }
    }

1 Ответ

1 голос
/ 03 июля 2011

Если вы хотите скрыть эту информацию от вызывающего, вы, очевидно, не ожидаете, что он изменит сущность напрямую. Вы можете создать базовый класс для Foo, который содержит только те свойства, которые должен видеть вызывающий объект.

public abstract class FooBase 
{
     public string FooName { get; set; }
}

public class Foo : FooBase
{
     public int BarCount { get; set; }
}

Затем вы можете вернуть вызывающему объекту экземпляр FooBase, а не Foo. НО, если у вызывающей стороны есть ссылка на ваш объект, он всегда может каким-то образом получить доступ к скрытой информации, используя Reflection.

Другим возможным вариантом было бы объявить интерфейс и сделать так, чтобы Foo реализовал его явно, хотя я не знаю, как EF-Code First отреагирует на это. Я использую подход, при котором я создаю из рук классы POCO и фрагменты отображения (файлы SSDL, CSDL и MSL), из которых я узнал, что EF может работать с типами, помеченными как внутренние. Но я не знаю, относится ли это и к Code-First.

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