在Entity Framework中使用存储过程(五):如何通过存储过程维护
发布时间:2020-12-16 09:04:43 所属栏目:asp.Net 来源:网络整理
导读:对于数据库设计来说,多对多(或者一对多)是一种常见的数据关系,比如联系人和地址之间的关系。我们通常采用建立关系表的方式来表示这种关系,比如我们创建一张Contact—_Address(ContactID,AddressID)来存储联系人和地址之间的关系。如果我们最终需要通
对于数据库设计来说,多对多(或者一对多)是一种常见的数据关系,比如联系人和地址之间的关系。我们通常采用建立关系表的方式来表示这种关系,比如我们创建一张Contact—_Address(ContactID,AddressID)来存储联系人和地址之间的关系。如果我们最终需要通过存储过程的方式来维护他们之间的关系,该如何做呢?本篇文章给你一个具体的例子来演示如果采用存储过程来建立和删除实体之间的关系。
?步骤一、创建数据表 我们就采用上面提到过的联系人/地址关联的场景,现在我们通过下面的SQL来创建三张表。Contact和Address分别用于存储联系人和地址记录,两者之间的关系存储在Contact_Address表中。 Address: 1: CREATE TABLE [Address] 3: [AddressID] [INT] PRIMARY KEY, 5: [City] [NVARCHAR](50) NULL
3: [ContactID] [INT] 4: [LastName] [NVARCHAR](50) 5: [FirstName] [NVARCHAR](50) 6: ) Contact_Address: 3: [ContactID] [INT] NULL REFERENCES [Contact]([ContactID]),1)" id="lnum4"> 4: [AddressID] [REFERENCES [Address]([AddressID]),1)" id="lnum5"> 5: KEY([ContactID],[AddressID])
PROCEDURE [AddAddress] 4: ) 6: BEGIN
8: VALUES(@ContactID,@AddressID);
PROCEDURE [DeleteAddress] 4: AS
7: DELETE Contact_Address
9: AND AddressID = @AddressID
<AssociationSetMapping Name="Contact_Address" TypeName="ContactModel.Contact_Address" StoreEntitySet="Contact_Address"> 3: ScalarProperty ="AddressID" ColumnName="AddressID" /> 7: >
8: ModificationFunctionMapping 9: InsertFunction FunctionName="ContactModel.Store.AddAddress" 10: 11: ParameterName="AddressID" 12: 13: 14: ="ContactID" 15: 16: InsertFunction 17: DeleteFunction ="ContactModel.Store.DeleteAddress" 18: 19: 20: 21: 22: 23: 24: DeleteFunction 25: 26: > 步骤五、编写建立Contact/Address关联的程序现在我们编写如下的程序,先后创建2个地址和3个联系人,并分别建立它们之间的关系后,通过调用ObjectContext的SaveChanges方法提交到数据库中。 2: Address address2 = Address.CreateAddress(2,1)">"XingHu Street #328 Blk 11",1)">"Su Zhou");
4: Contact liSi = Contact.CreateContact(2,1)">"Li",1)">"Si"); 6:? 8: liSi.Addresses.Add(address1); 10:? 12: { 14: context.Contacts.AddObject(liSi); 16: context.SaveChanges(); 相关内容
|