0

У меня есть класс linq-to-sql. У меня есть свойство «Пароль», для которого я хочу позвонить базовому поставщику членства ASP.NET. Таким образом, я не хочу, чтобы это свойство записывалось напрямую, но через мой собственный код. Я в основном хочу создать фасад/прокси для этого свойства, чтобы я мог использовать базовый поставщик членства или пользовательскую хранимую процедуру.Расширить частичный класс linq-to-sql, чтобы избежать записи свойства?

Я хочу выполнить, не изменяя созданный конструктор кода LINQ-TO-SQL, если это вообще возможно.

+0

Кертис - ваш вопрос, как есть, мало смысла. Членство в ASP.Net не «лежит в основе» Linq2Sql. Вы получите лучшие результаты, если будете описывать, что вы пытаетесь сделать, используя простые термины, которые каждый может понять. Ошибочные термины art/buzzwords не помогают. Измените свой вопрос и давайте еще раз взглянем на него. –

+0

Это имеет смысл для всех, кто знает API-интерфейс ASP.NET и как работает LINQ-to-SQL. Однако для тех, кто предпочитает более общее описание. Я хочу создать свойство linq-to-sql, чтобы он не записывался в базу данных сгенерированным кодом/datacontext, а вместо этого записывался в базу данных с помощью настраиваемого пользовательского метода и, в идеале, я хотел бы сделать это без внесения каких-либо изменений в класс, сгенерированный конструктором, включая, но не ограничиваясь, изменение метаданных, полное удаление свойства или любые другие изменения. Я думаю, что мое собственное решение удовлетворяет это наилучшим образом. –

+1

Пара вопросов: при ответе на комментарий кого-то вы должны использовать символ «@» и часть своего имени, чтобы убедиться, что они получили сообщение. например «@Sky - Он делает ...».Во-вторых: я чувствую, что у меня довольно четкое понимание API-интерфейса членства (см. Мои ответы) и L2S, и ваш вопрос, как представлено, не ясен в желаемом результате. Об этом может свидетельствовать недостаток применимых ответов. Вы можете обнаружить, что при обращении за помощью более примирительное отношение приведет к лучшим результатам. –

ответ

-3

Похоже, что возможно создать пользовательский DataContext для обработки этой ситуации.

http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx


Есть частичные методы индивидуальных свойств, как, хорошо и с OnValidate методом.

В моем случае я считаю, что лучшим решением является выброс исключения в метод изменения свойств и добавление общедоступного метода для установки этого индивидуального свойства. Это решение, хотя и не идеальное, позволит не касаться кода, сгенерированного SQL, где свойство может быть установлено только для чтения или удаляется установщик.

Другие предложения приветствуются.

3

Это возможно. Вы можете добавить свои свойства и методы в класс, созданный linq, используя механизм частичного класса. Linq генерироваться классы отмечены частичными, так что вы можете добавить член класса с:

public partial class YourLinqClass 
{ 
    // your methods and properties. refer linq properites and methods with "this." 
    // example: 
    public string Password 
    { 
    get 
    { 
     int id = this.UserId; 
     string password = // ... get password 
     return password; 
    } 
    set 
    { 
     // ... 
    } 
    } 
} 

Вы должны поместить частичный класс в том же пространстве имен, что и остальные DBML.

+0

Плохой ответ, он очень общий и не отвечает на конкретный вопрос. –

+0

@Curtis: Насколько я понял ваш вопрос, вы хотите добавить некоторый код (свойство) в класс, созданный linq, и именно это я объяснил, как это сделать. Я не знаю точную логику получения пароля, которую вы используете. Я ответил, как добавить свойство proxy в классы linq (я добавил еще несколько кода, чтобы сделать его более понятным). – PanJanek

+0

Да, я понимаю, как это сделать. Этот вопрос касается того, как изменить созданное конструктором свойство, т. Е. Уже сгенерированное свойство. Как уже сказал мой собственный ответ, для каждого свойства есть частичные методы. Но моя проблема выходит за рамки этого, поскольку я не хочу, чтобы свойство сохранялось с использованием структуры LINQ, но также не хочу изменять код, созданный разработчиком. Не затрагивая код, созданный разработчиком, является ключевым, поскольку, когда мы идем по этому маршруту, он меняет весь рабочий процесс. –

0

Лучший вариант - удалить свойство от дизайнера и записать его в коде в частичном классе, как описано PanJanek.

Однако, если вы делаете это так, вы преследуете плохой дизайн. Вы вводите зависимость в свой класс сущностей, который разрушает инкапсуляцию слоя. Сущности классов не должны знать о провайдерах больше, чем они знают о DataContext, который загружает их. На самом деле они не должны быть чем-то большим, чем контейнеры для ввода данных в базу данных и из нее.

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

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