2009-04-07 2 views
0

Я надеюсь, что вы сможете помочь. Я разрабатываю многоуровневый сайт, используя Linq to Sql. Я создал новый класс (или объект) в DBML-дизайнере с именем memberState. Этот объект не является фактической таблицей в базе данных. У меня этот метод в моем среднем слое:

N-Tiered LinqToSql Вопрос

общественного переопределение IEnumerable (memberState) GetMembersByState (строка @state)
{
используя (BulletinWizardDataContext контекст = DataContext)
{
IEnumerable (memberState) MEMS = (от м в context.Members
присоединиться к ма в context.MemberAddresses
на m.UserId равна ma.UserId
присоединиться с в context.States
на ma.StateId равна s.StateId
, где s.StateName == @state
выбрать новый memberState
{
= идентификатор пользователя m.UserID,
Firstname = m.FirstName,
MiddleInitial = m.MiddleInitial,
LastName = m.LastName,
createDate = m.CreateDate,
modifyDate = m.ModifyDate
}). ToArray (memberState)();
return mems;
}
}

Таблица в моем объединении (члены, государство и MemberAddresses фактические таблицы в моей базе данных). Я создал объект memberStates, поэтому я мог бы использовать его в запросе выше (обратите внимание на Выберите New memberState. Когда данные обновляются на веб-странице, как я могу сохранить изменения в таблице Member? Моя таблица Member состоит из следующие столбцы:. UserId, FirstName, MiddleInitial, LastName, CreateDate, ModifyDate Я не уверен, как сохранить изменения в базу данных

Спасибо,

+0

Я не думаю, что ваше приложение N-многоуровневое имеет какое-либо влияние на проблему/вопрос. – achinda99

ответ

0

Если я правильно помню, вы можете создать представление. из разных таблиц (Members, States и MemberAddresses) и добавить это в контекст данных. Затем любые изменения данных в объекте представления могут быть сохранены, а linq to sql будет обрабатывать фиксацию правильно, поскольку lo поскольку все отношения четко установлены/определены как в базе данных, так и в контексте данных.

0

Если у вас есть таблица Member, то dbml, скорее всего, будет содержать класс Member. Чтобы обновить член в базе данных, вам нужно будет создать новый объект-член и привязать его к коллекции BulletinWizardDataContext.Members. Нечто подобное следующему коду должен трюк (я не проверял код):

using (BulletinWizardDataContext context = DataContext) 
{ 
    Member m = new Member() { UserId = userId }; 
    context.Members.Attach(m); 
    m.FirstName = firstName; 
    // Set other properties 
    context.SubmitChanges(); 
} 

Attach необходимо вызвать перед установкой свойства. Кроме того, у Linq2Sql есть некоторые проблемы с Attach в том случае, когда свойства вашего объекта установлены на значения по умолчанию (то есть 0 для числовых значений, false для booleans, null для строки и т. Д.). В этом случае Attach не будет генерировать правильный SQL.

0
var m = myContext.Members.Single(m=> m.UserID == myMemState.userID); 
m.FirstName = myMemState.firstName; 
m.MiddleInitial = myMemState.middleInitial; 
... 

Это был бы быстрый способ. Он выполняет дополнительный переход к дБ, но будет хорошо работать. Если это проблема для вас, тогда сделайте Attach, как предложил Якоб.Для этого вам нужно сделать несколько дополнительных шагов, например, просмотреть конфигурацию для оптимистичных обновлений и убедиться, что у вас есть исходные поля при создании.

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