1

このような質問は以前に何度も回答されていると確信していますが、提案が機能することはありません。

エンティティが既存のテーブルから生成された Entity Framework 5 を使用して MVC 4 アプリケーションを構築しています。次のようなエンティティクラスがあります。

namespace RebuildingModel
{
    using System;
    using System.Collections.Generic;

    public partial class StandardCodeTable
    {
        public StandardCodeTable()
        {
            this.StandardCodeTableTexts = new HashSet<StandardCodeTableText>();
        }

        public int TableCode { get; set; }
        public string RefTableName { get; set; }

        public virtual ICollection<StandardCodeTableText> StandardCodeTableTexts { get; set; }
    }
}

namespace RebuildingModel
{
    using System;
    using System.Collections.Generic;

    public partial class StandardCodeTableText
    {
        public int TableCode { get; set; }
        public string LanguageCode { get; set; }
        public string TextVal { get; set; }

        public virtual StandardCodeTable StandardCodeTable { get; set; }
    }
}

namespace RebuildingSite.Models
{
    public class CodeTableJoined
    {
        public int TableCode { get; set; }
        public string ReferenceTableName { get; set; }
        public string LanguageCode { get; set; }
        public string TextValue { get; set; }
    }
}

次のようなDAOがあります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RebuildingModel.Dao
{
    public class CodeTableDao
    {
        public CodeTableDao() { }

        public ISet<StandardCodeTableText> GetCode(string refTableName)
        {
            HashSet<StandardCodeTableText> codes = new HashSet<StandardCodeTableText>();

            using (var db = new RebuildingTogetherEntities())
            {
                db.StandardCodeTableTexts.Include("StandardCodeTables");

                var query = from c in db.StandardCodeTableTexts
                            where c.StandardCodeTable.RefTableName == refTableName
                            orderby c.TableCode
                            select c;

                foreach (var item in query)
                {
                    codes.Add(item);
                }
            }

            return codes;
        }
}

次のようなコントローラーがあります。

namespace RebuildingSite.Controllers
{
    public class CodeTableController : Controller
    {
        public ActionResult Index(string refTableName)
        {
            CodeTableDao dao = new CodeTableDao();

            ICollection<StandardCodeTableText> codes = dao.GetCode(refTableName);

            HashSet<CodeTableJoined> joins = new HashSet<CodeTableJoined>();

            foreach (var code in codes)
            {
                CodeTableJoined join = new CodeTableJoined();

                join.TableCode = code.TableCode;
                join.LanguageCode = code.LanguageCode;
                join.TextValue = code.TextVal;
                join.ReferenceTableName = code.StandardCodeTable.RefTableName;

                joins.Add(join);
            }

            ISet<string> refTableNames = dao.GetReferenceTables();

            ViewBag.RefTableNames = refTableNames;

            return View(joins);
        }
    }
}

コントローラーにアタッチされたビューを実行すると、関係が使用されているこの行で ObjectDisposedException がスローされます。

join.ReferenceTableName = code.StandardCodeTable.RefTableName;

これは単純なものでなければなりません。私は何を間違っていますか?その Include() 呼び出しをコンテキストからさまざまな場所で、複数回追加しようとしました。
また、Linq クエリに明示的な結合を追加しようとしました。私はEFにその関係を取得させることができません。

4

1 に答える 1

1

コメントを回答にコピーする - include be を実際のクエリに入れる

 var query = from c in
 db.StandardCodeTableTexts.include("StandardCodeTables"). where
 c.StandardCodeTable.RefTableName == refTableName orderby c.TableCode
 select c;
于 2013-05-20T03:38:53.067 に答える