将EF(数据库优先)序列化为视图状态

本文关键字:序列化 视图状态 EF 数据库 | 更新日期: 2023-09-27 18:20:47

我在尝试将EF对象存储到视图状态时遇到了一些问题,经过大量的谷歌搜索(通常最终在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. 因此,根据实体框架:如何在实体框架文章中将模型设置为Serializable,我创建了一个新的类

    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. 现在,这就是我的困境。正如人们所说,它在同一类型的隐式转换中失败了。

将EF(数据库优先)序列化为视图状态

您定义了一个新类,可能在不同的命名空间或不同的程序集中。那个类是有一个部分的partial