簡體   English   中英

如何關聯定制的虛擬對象以鏈接到像實體框架一樣工作的關系對象?

[英]How do I associate custom made virtual objects to link to relational objects working like Entity Framework?

我有一個CustomerDetails和一個CustomerAddress對象。 構造函數如下:

public class CustomerDetails
{
    [Key]
    public int CustomerID { get; set; }

    [Required]
    [StringLength(50)]
    public string CustomerName { get; set; }

    public int AddressID { get; set; }

    public virtual CustomerAddress customerAddress { get; set; }
}

public class CustomerAddress
{
    [Key]
    public int AddressID { get; set; }

    [Required]
    [StringLength(200)]
    public string Address { get; set; }
    public virtual ICollection<CustomerDetails> CustomerDetails { get; set; }
}

我已經從生成的 Entity Framework 代碼中復制了這兩個構造函數。

我使用SqlDataReader填充客戶列表和地址列表

List<CustomerDetails> customers = new List<CustomerDetails>();
List<CustomerAddress> addresses = new List<CustomerAddress>();

SqlCommand cmd = new SqlCommand("select * from Customerdetails", con);

using (IDataReader rdr = cmd.ExecuteReader())
{
    while (rdr.Read())
    {
        CustomerDetails customer = new CustomerDetails
                    {
                        CustomerID = Convert.ToInt32(rdr["CustomerID"]),
                        AddressID = Convert.ToInt32(rdr["AddressID"]),
                        CustomerName = rdr["CustomerName"].ToString()
                    };
        customers.Add(customer);
    }
}

cmd = new SqlCommand("select * from CustomerAddress", con);

using (IDataReader rdr = cmd.ExecuteReader())
{
    while (rdr.Read())
    {
        CustomerAddress address = new CustomerAddress
                    {
                        AddressID = Convert.ToInt32(rdr["AddressID"]),
                        Address = rdr["Address"].ToString()
                    };
                    addresses.Add(address);
    }
}

當我嘗試使用 LINQ 綁定數據以顯示客戶地址時,它無法按預期工作。

GridView1.DataSource = from c in customers
                       select new { c.CustomerName, c.customerAddress.AddressID};
GridView1.DataBind();

我收到一個錯誤:

你調用的對象是空的

我知道這會發生。 但是讓虛擬對象鏈接到關系對象以使引用起作用的技巧是什么?

我認為您可能需要自己填充虛擬屬性,或者只是刪除它們並在查詢中使用內部聯接。

// populate
For Each CustomerDetail from db        
    IF CustomerDetail.AddressId NOT IN addresses
       Fetch CustomerAddress from Db
       addresses.Add(CustomerAddress )
    ELSE
       FETCH CustomerAddress from addresses
    END
    CustomerDetail.customerAddress = CustomerAddress
    CustomerAddress.CustomerDetails.Add(CustomerDetail)
    customers.Add(CustomerDetail)


//inner join
from c in customers
      join a in addresses on c.AddressID equals a.AddressID
      select new { c.CustomerName, a.Address}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM