0

データベースのレコードを表示しています。レコードは他のテーブルからデータを取得し、メインテーブルのIntを使用して値を表すため、Itemテーブルの除算は1に等しく、除算テーブルは1=ALLです。レコードを表示しているので、1をすべてに変換しようとしています。すべてのIDフィールドにintが表示されます。これが私のコードが実行するように指示していることです。しかし、私は名前を表示しようとしています、そしてそれをするとき、私はたくさんの赤を取得します。名前が見つかりません。CatagoryIDである必要がありますCategoryName

それが理にかなっていることを願っています。

if (!IsPostBack)
{
     string v = Request.QueryString["ContactID"];
     int itemid;
     int.TryParse(v, out itemid);
     var customerInfo =  GetCustomerInfo(itemid);
     CONTACTID.Text = customerInfo[0].ContactID.ToString();
     ContactTitle.Text = customerInfo[0].ContactTitlesID.ToString();
     ContactNameB.Text = customerInfo[0].ContactName;
     DropDownAddCategory.Text = customerInfo[0].CategoryID.ToString();
     DDLAddDivision.Text = customerInfo[0].DivisionID.ToString();
     ContactPhoneBox.Text = customerInfo[0].ContactOPhone;
     ContactCellBox.Text = customerInfo[0].ContactCell;
     ContactEmailBox.Text = customerInfo[0].ContactEmail;
     CextB.Text = customerInfo[0].Ext;
}

private List<Solutions.Models.Contact> GetCustomerInfo(int itemid)
{
     using (ItemContext context = new ItemContext())
     {
         return (from c in context.Contacts 
                 where c.ContactID == itemid
                 select c).ToList();
     }
}

これがモデルです

public class Contact
{
        [ScaffoldColumn(false)]
        public int ContactID { get; set; }    
        public System.DateTime ContactCreated { get; set; }    
        public string ContactName { get; set; }    
        public int? ContactTitlesID { get; set; }    
        public string ContactOPhone { get; set; }    
        public bool cApproved { get; set; }    
        public string User { get; set; }
        public string ContactCell { get; set; }    
        public string ContactEmail { get; set; }    
        public int? DivisionID { get; set; }    
        public int? CategoryID { get; set; }    
        [StringLength(5)]
        public string CExt { get; set; }           
        public virtual Division Division { get; set; }
        public virtual Category Category { get; set; }
        public virtual ContactTitle ContactTitle { get; set; }    
        public string Ext { get; set; }
}
4

2 に答える 2

1

Entity Frameworkを使用すると、関連するエンティティをクエリ結果に含めることができます。

 return (from c in context.Contacts.Include("Catagory") 
         where c.ContactID == itemid
         select c).ToList();

これにより、Catagoryオブジェクトとの連絡先が返されます。customerInfo.Catagory.CategoryName

ところで、連絡先のリストを返し、インデックスで最初の連絡先を選択する代わりに(したがって、インデックスが範囲外の例外を持っている可能性があります)、最初の連絡先(または見つからない場合はデフォルト)を返すようにメソッドを変更します。

private Solutions.Models.Contact GetCustomerInfo(int itemid)
{
     return (from c in context.Contacts.Include("Catagory") 
             where c.ContactID == itemid
             select c).FirstOrDefault();
}

そしてそれをこのように使用します:

var customerInfo =  GetCustomerInfo(itemid);
if (customerInfo != null)
{        
    CONTACTID.Text = customerInfo.ContactID.ToString();
    // etc
}
于 2012-12-10T17:58:12.377 に答える
0

LINQ toSQLまたはEntityFrameworkを使用していますか?モデルをもう一度チェックし、2つのテーブル間の関係が正しく設定されていることを確認します。関係がモデルから欠落している可能性があり、この問題を引き起こしています。

于 2012-12-10T16:32:12.167 に答える