本文共 3346 字,大约阅读时间需要 11 分钟。
在Entity Framework中,AssociationAttribute.Storage属性 是用于定义实体类属性的存储位置,是实现对象关系映射的关键配置。以下是关于该属性的详细说明。
Storage 属性用于指定一个私有的属性来存储实体关系映射的集合。在Entity Framework中,集合 mapper 会根据映射信息将相关实体连接。以下是该属性的重要特性:
在使用 Storage 属性之外,传统的方法还涉及字段映射(即不使用 Storage 属性)。这种方法的区别在于:
Storage 属性。以下是创建映射的两个实体类代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.Linq.Mapping;using System.Data.Linq;namespace Demo06Ex03 { [Table(Name = "Customers")] public class Customer { [Column(Name = "CustomerID", IsPrimaryKey = true)] public string CustomerID; [Column(Name = "ContactName")] public string ContactName; [Column(Name = "Phone")] public string Phone; private EntitySet _Orders; [Association(Storage = "_Orders", ThisKey = "CustomerID", OtherKey = "CustomerID")] public EntitySet Orders { get { return this._Orders; } set { this._Orders.Assign(value); } } } [Table(Name = "Orders")] public class Order { [Column(Name = "OrderID", IsPrimaryKey = true)] public int OrderID; [Column(Name = "CustomerID")] public string CustomerID; [Column(Name = "OrderDate")] public DateTime OrderDate; [Column(Name = "Freight")] public decimal Freight; private EntityRef _Customer; [Association(Storage = "_Customer", ThisKey = "CustomerID", OtherKey = "CustomerID")] public Customer Customer { get { return this._Customer.Entity; } set { this._Customer.Entity = value; } } }} 自定义数据上下文代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.Linq;namespace Demo06Ex03 { public class NorthwindDataContext : DataContext { public Table Customers { get { return this.GetTable (); } } public Table Orders { get { return this.GetTable (); } } public NorthwindDataContext(string ConnectionString) : base(ConnectionString) { } }} 开发示例代码如下:
// 获取客户的所有订单记录string DatabaseFileName = @"C:/LINQ/Northwind.mdf";NorthwindDataContext db = new NorthwindDataContext(DatabaseFileName);Console.WriteLine(db.Customers.Select(c => c.ContactName).ToString());foreach (var CustomerObject in db.Customers) { var CustomerOrders = CustomerObject.Orders; foreach (var OrderObject in CustomerOrders) { Console.WriteLine("OrderID={0}, OrderDate={1}, Freight={2}", OrderObject.OrderID, OrderObject.OrderDate, OrderObject.Freight); }}// 通过订单对象获取客户信息foreach (var OrderObject in db.Orders) { var OrderCustomer = OrderObject.Customer; Console.WriteLine("CustomerID={0}, Name={1}, Phone={2}", OrderCustomer.CustomerID, OrderCustomer.ContactName, OrderCustomer.Phone);} 这种配置方式确保了对象关系映射的准确性,使开发者能够方便地通过类属性访问相关实体。
转载地址:http://uitiz.baihongyu.com/