1

データベース ファースト インポートで生成したマスター/子関係モデルがあります。同じページに子データを出力しようとすると、データではなく、子行ごとに「System.Data.Entity.DynamicProxies...」という文字列が表示されます。.NET MVC は、子コレクションを認識し、行データを自動出力するのに十分スマートであると考えました (最終的には、表示/編集形式のテンプレートを追加します)。メイン ビューでループを介してデータを反復処理できるため、データはコレクション内にありますが、子クラスの DisplayFor を実行しようとすると、代わりにプロキシ名などが表示されます。何が起きているか知っている人はいますか?ありがとう。

生成されたモデル (簡潔にするために余分なフィールドは省略されています) は次のとおりです。

namespace Test.Models
{

    public partial class HCCB_CR
    {
        public HCCB_CR()
        {
            this.HCCB_CR_CONTACTS = new HashSet<HCCB_CR_CONTACT>();
        }

        public string CCID { get; set; }
        public virtual ICollection<HCCB_CR_CONTACT> HCCB_CR_CONTACTS { get; set; }
    }
}

namespace Test.Models
{
    public partial class HCCB_CR_CONTACT
    {
        public decimal ID { get; set; }     //key
        public string CCID { get; set; }    // foreign key to hccb_cr

        public virtual HCCB_CR HCCB_CR { get; set; }
    }
}

詳細用に生成された足場 (省略):

@model Test.Models.HCCB_CR
@{
    ViewBag.Title = "Details";
}

<h2>Details</h2>

<fieldset>
    <legend>HCCB_CR</legend>

    <div class="display-label">
         @Html.DisplayNameFor(model => model.CCID)
    </div>
    <div class="display-field">
        @Html.DisplayFor(model => model.CCID)
    </div>

    <div class="display-field">
        @Html.DisplayFor(model => model.HCCB_CR_CONTACTS)
    </div>
</fieldset>

出力:

CCID 
HCCB-CR100290 
System.Data.Entity.DynamicProxies.HCCB_CR_585E5CAF66461CDD0DF7F83DACDFCA848E78470297E638B38AB0FFDC8CBD83DASystem.Data.Entity.DynamicProxies.HCCB_CR_585E5CAF66461CDD0DF7F83DACDFCA848E78470297E638B38AB0FFDC8CBD83DASystem.Data.Entity.DynamicProxies.HCCB_CR_585E5CAF66461CDD0DF7F83DACDFCA848E78470297E638B38AB0FFDC8CBD83DASystem.Data.Entity.DynamicProxies.HCCB_CR_585E5CAF66461CDD0DF7F83DACDFCA848E78470297E638B38AB0FFDC8CBD83DASystem.Data.Entity.DynamicProxies.HCCB_CR_585E5CAF66461CDD0DF7F83DACDFCA848E78470297E638B38AB0FFDC8CBD83DASystem.Data.Entity.DynamicProxies.HCCB_CR_585E5CAF66461CDD0DF7F83DACDFCA848E78470297E638B38AB0FFDC8CBD83DA

System.Data.Entity.DynamicProxies.HCCB_CR_... とは何ですか? なぜ取得するのですか?

更新:これが役立つことを願っています。DisplayFor にステップインしたときのデバッグ出力:

The thread '<No Name>' (0x3e70) has exited with code 0 (0x0).
Step into: Stepping over non-user     code 'System.Web.Mvc.WebViewPage<Test2.Models.HCCBJEFF_CR>.Html.get'
The thread '<No Name>' (0x3e48) has exited with code 0 (0x0).
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR.HCCBJEFF_CR_CONTACTS.get'
Step into: Stepping over non-user code 'System.Data.Entity.DynamicProxies.HCCBJEFF_CR_9D376C551350D68ED0D45F44495C7047639AE18E195454A7CE1DAB8EB66DDAF2.HCCBJEFF_CR_CONTACTS.get'
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR.CCID.get'
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.RelatedEnd.CreateSourceQuery<Test2.Models.HCCBJEFF_CR_CONTACT>'
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.RelatedEnd.ValidateLoad<Test2.Models.HCCBJEFF_CR_CONTACT>'
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.EntityCollection<Test2.Models.HCCBJEFF_CR_CONTACT>.Load'
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.HCCBJEFF_CR_CONTACT'
Step into: Stepping over non-user code 'System.Data.Entity.DynamicProxies.HCCBJEFF_CR_CONTACT_0D5EDED0A9ECB95525658A667586E43649A2EDCBFD933981026D54A30B929661.HCCBJEFF_CR_CONTACT_0D5EDED0A9ECB95525658A667586E43649A2EDCBFD933981026D54A30B929661'
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.CONTACTID.set'
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.CNAME.set'
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.CCID.set'
Step into: Stepping over non-user code 'System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly<Test2.Models.HCCBJEFF_CR_CONTACT>'
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.CONTACTID.get'
Step into: Stepping over non-user code 'System.Data.Objects.ObjectStateManager.CheckKeyMatchesEntity'
Step into: Stepping over non-user code 'System.Data.Objects.ObjectStateManager.AddEntry'
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.CNAME.get'
Step into: Stepping over non-user code 'System.Data.Objects.EntityEntry.TakeSnapshot'
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.CCID.get'
Step into: Stepping over non-user code 'System.Data.Objects.EntityEntry.TakeSnapshot'
Step into: Stepping over non-user code 'System.Data.Objects.ObjectStateManager.AddEntry'
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.HCCBJEFF_CR.get'
Step into: Stepping over non-user code 'System.Data.Entity.DynamicProxies.HCCBJEFF_CR_CONTACT_0D5EDED0A9ECB95525658A667586E43649A2EDCBFD933981026D54A30B929661.GetBasePropertyValue'
Step into: Stepping over non-user code 'System.Data.Objects.Internal.EntityProxyFactory.TryGetBasePropertyValue'
Step into: Stepping over non-user code 'System.Data.Objects.Internal.EntityProxyFactory.CreateBaseGetter.AnonymousMethod__4'
Step into: Stepping over non-user code 'System.Data.Objects.Internal.PocoPropertyAccessorStrategy.GetNavigationPropertyValue'
Step into: Stepping over non-user code 'System.Data.Objects.EntityEntry.WillNotRefSteal'
Step into: Stepping over non-user code 'System.Data.Objects.EntityEntry.FixupEntityReferenceToPrincipal'
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.HCCBJEFF_CR.set'
Step into: Stepping over non-user code 'System.Data.Entity.DynamicProxies.HCCBJEFF_CR_CONTACT_0D5EDED0A9ECB95525658A667586E43649A2EDCBFD933981026D54A30B929661.HCCBJEFF_CR.set'
Step into: Stepping over non-user code 'System.Data.Objects.Internal.PocoPropertyAccessorStrategy.SetNavigationPropertyValue'
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.RelatedEnd.Add'
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.EntityReference<Test2.Models.HCCBJEFF_CR>.ReferenceValue.set'
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.EntityReference.SetEntityKey'
Step into: Stepping over non-user code 'System.Data.Objects.EntityEntry.FixupEntityReferenceToPrincipal'
Step into: Stepping over non-user code 'System.Data.Objects.EntityEntry.FixupReferencesByForeignKeys'
Step into: Stepping over non-user code 'System.Data.Objects.ObjectStateManager.FixupReferencesByForeignKeys'
Step into: Stepping over non-user code 'System.Data.Objects.ObjectStateManager.AddEntry'
Step into: Stepping over non-user code 'System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly<Test2.Models.HCCBJEFF_CR_CONTACT>'
Step into: Stepping over non-user code 'System.Data.Common.Internal.Materialization.Coordinator<Test2.Models.HCCBJEFF_CR_CONTACT>.ReadNextElement'
Step into: Stepping over non-user code 'System.Data.Common.Internal.Materialization.Shaper<Test2.Models.HCCBJEFF_CR_CONTACT>.SimpleEnumerator.MoveNext'
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.RelatedEnd.Merge<Test2.Models.HCCBJEFF_CR_CONTACT>'
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.EntityCollection<Test2.Models.HCCBJEFF_CR_CONTACT>.Load'
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.RelatedEnd.DeferredLoad'
Step into: Stepping over non-user code 'System.Data.Objects.Internal.LazyLoadBehavior.LoadProperty<System.__Canon>'
Step into: Stepping over non-user code 'System.Data.Entity.DynamicProxies.HCCBJEFF_CR_9D376C551350D68ED0D45F44495C7047639AE18E195454A7CE1DAB8EB66DDAF2.HCCBJEFF_CR_CONTACTS.get'
Step into: Stepping over non-user code 'System.Web.Mvc.ModelMetadata.FromLambdaExpression<Test2.Models.HCCBJEFF_CR,System.Collections.Generic.ICollection<Test2.Models.HCCBJEFF_CR_CONTACT>>.AnonymousMethod__2'
Step into: Stepping over non-user code 'System.Web.Mvc.ModelMetadata.Model.get'
Step into: Stepping over non-user code 'System.Web.Mvc.Html.TemplateHelpers.TemplateHelper'
Step into: Stepping over non-user code 'System.Web.Mvc.Html.TemplateHelpers.TemplateFor<Test2.Models.HCCBJEFF_CR,System.Collections.Generic.ICollection<Test2.Models.HCCBJEFF_CR_CONTACT>>'

HCCB_CR_CONTACT テンプレート:

    @model Test.Models.HCCB_CR_CONTACT

    <fieldset>
        <legend>HCCB_CR_CONTACT</legend>

        <div class="display-label">
             @Html.DisplayNameFor(model => model.ID)
        </div>
        <div class="display-field">
            @Html.DisplayFor(model => model.ID)
        </div>
        <div class="display-label">
             @Html.DisplayNameFor(model => model.CCID)
        </div>
        <div class="display-field">
            @Html.DisplayFor(model => model.CCID)
        </div>
    </fieldset>
    <p>
        @Html.ActionLink("Edit", "Edit", new { id=Model.ID }) |
        @Html.ActionLink("Back to List", "Index")
    </p>
4

3 に答える 3

0

私は同じ問題を抱えていましたが、どういうわけか、私の.cshtmlファイル ( DisplayTemplates内) は (もう) 公開されませんでした。

Build ActionがContentに設定されていることを確認してください。

理解するのに何時間もかかったので、解決策として言及したいと思います。

于 2015-03-09T16:08:27.963 に答える