EF(db first)到viewstate的序列化

时间:2014-09-04 09:08:06

标签: c# asp.net serialization entity-framework-6

我在尝试将EF对象存储到viewstate中时遇到了一些问题,经过大量的Google搜索后(通常以SO结尾)最终出现了更多问题。

  1. 我有一个DB First EF 6实体模型,带有自动生成的类,其中一个叫做MyRole
  2. 然后我有一个DAL包装对EF对象的访问..这里是重要部分的摘录

    namespace MyApp
    {
        public class EFDataAccess : IDisposable
        {
            private MyEntities context;
    
            public static IEnumerable<MyRole> GetRoles()
            {
                IEnumerable<MyRole> oRet = null;
                using (EFDataAccess oRepo = new EFDataAccess())
                {
                    oRet = oRepo.context.Roles.AsEnumerable();
                }
                return oRet;
            }
        }
    }
    
  3. 我的ASP.Net页面包含以下内容

    ViewState["lstRoles"] = EFDataAccess.GetRoles().ToList();
    

    现在,问题在于ASP.Net barfs说它无法添加到视图状态MyRole不可序列化。

  4. 因此,根据Entity Framework: How to set model as Serializable in Entity Framework文章,我创建了一个新类

    namespace MyApp
    {
        [Serializable]
        public partial class MyRole
        {
        }
    }
    
  5. 到目前为止一直很好,除非我现在运行应用程序,我得到以下runtime compilation error

    Compilation Error 
    
    Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
    
    Compiler Error Message: CS0266: Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<MyApp.MyRole> [c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll]' to 'System.Collections.Generic.IEnumerable<MyApp.MyRole> [c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll]'. An explicit conversion exists (are you missing a cast?)
    
    
    Source Error:
    
    Line xxxx: using (EFDataAccess oRepo = new EFDataAccess())
    Line xxxx: {
    Line xxxx:     oRet = oRepo.context.CallTrackerRoles.AsEnumerable();  *** THIS LINE HIGHLIGHTED RED
    Line xxxx: }
    Line xxxx: return oRet;
    
  6. 现在,这就是我被困住的地方。正如它所说的那样,对同一类型的隐式转换失败了。

1 个答案:

答案 0 :(得分:1)

您已经定义了一个新类,可能在不同的命名空间或不同的程序集中。该课程为partial,其中有一部分。