0

我希望你能帮忙。我正在使用 Linq to Sql 开发一个分层网站。我在 DBML 设计器中创建了一个名为 memberState 的新类(或对象)。此对象不是数据库中的实际表。我的中间层有这个方法:

public override IEnumerable(memberState) GetMembersByState(string @state)
{
using (BulletinWizardDataContext context = DataContext)
{
IEnumerable(memberState) mems = (from m in context.Members
join ma in context.MemberAddresses
on m.UserId 等于 ma.UserId
join s在 ma.StateId 上的 context.States
中等于 s.StateId
其中 s.StateName == @state
select new memberState
{
userId = m.UserID,
firstName = m.FirstName,
middleInitial = m.MiddleInitial,
lastName = m.LastName,
createDate = m.CreateDate,
modifyDate = m.ModifyDate
}).ToArray(memberState)();
返回内存;
}
}

我的联接中的表(Members、States 和 MemberAddresses 是我的数据库中的实际表)。我创建了对象 memberStates 以便可以在上面的查询中使用它(注意Select New memberState。当网页上的数据更新时,如何将更改保留回成员表?我的成员表由以下列组成: UserId, FirstName, MiddleInitial, LastName, CreateDate, ModifyDate. 我不确定如何将更改保存回数据库。

谢谢,

4

3 回答 3

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

那将是快速的方法。它对数据库进行了额外的往返,但效果很好。如果这对您来说是个问题,那么请按照 Jakob 的建议进行附加。为此,您必须执行一些额外的步骤,例如检查配置以进行乐观更新,并确保在执行附加时拥有原始字段。

于 2009-04-12T13:45:36.667 回答
0

如果我没记错的话,您可以从不同的表(Members、States 和 MemberAddresses)创建一个视图并将其添加到数据上下文中。然后可以保存对视图对象中数据的任何修改,只要在数据库和数据上下文中明确设置/定义了所有关系,linq to sql 就会正确处理提交。

于 2009-04-07T14:28:59.563 回答
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,字符串为 null 等)。在这种情况下,Attach 不会生成正确的 SQL。

于 2009-04-07T14:55:09.610 回答