葡京网上娱乐场EF(EntityFramework)与mysql使用,序列化问题[System.ObjectDisposedException]

  链表的操作主要是环着指针域和指向内存的提请假释进行,一般的操作就是增多、删、改、查。头节点可以跟其余的节点数据类型不同,头节点的值域中可以存放有链表的信息,比如说链表的长度,创建时间,创建人等等。

‘((System.Data.Entity.DynamicProxies.T_Module_FA775BC9946D7E533F86AFE9B59A3A33C411E1511C687B52EB12BAE7ACD1F195)(new
System.Collections.Generic.Mscorlib_CollectionDebugView<T_Module>(resultList).Items[0])).RoleModuleList’
threw an exception of type ‘System.ObjectDisposedException’

       

在延续实现DbContext的构造方法里面安装相应之属性,我只是以了里面同样栽方案,大家只要按自己的方法取得的结果未惬意的语句可以点开这个链接以可自己之方案。

   下面要因为一个粗略的C程序来具体操作一下。

 

  这里自己简单说一下呀是Makefile。在Windows下编译工作且是因为IDE来好,例如VC6.0编译工程,你切莫待管文件中的指关系。但是于Linux环境下就片行事由MakeFile完成。MakeFile关系到整工程的编译规则,一个工下文件不计其数,按模块、类型、功能划分在不同的目录下,MakeFile指定了一致多元规则来指定哪些文件先编译,哪些文件需要后编译,哪些文件要重新编译,甚至还起一对再扑朔迷离的机能操作。它带动的益处就是“自动化编译”,一旦写好MakeFile文件,工程的编译只需要一个make命令,整个工程就是会自行编译。上面就是是本人也链表写的一个要命粗略的MakeFile文件,后续之博客中见面更新MakeFile的连锁用法。

 

  以下为chain.c文件

每次都见面报是那个,网上参考资料:http://blog.csdn.net/gaibian0823/article/details/47959131

  以下为MakeFile文件

于EF
中利用mysql关联取多少时,如果手上实体中寓其他一个实体的list成员,而这成员为空的讲话,在json序列化的上就是见面报错:

               
|____Makefile  MakeFile文件,编译的时候使用,如果是最先接触的言辞请忽略,后续之博客中会更新。

this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;

      

  链表中之素称为结点,一般由片有些组成:指针域和值域,值域可以是着力数据列也可以是结构体等复杂数据列,存放需要之切实数据;指针域为对下一个节点的指针。根据指针域的不同链表可以分为单为链表,双向链表,循环链表等等。

chain.h

  上面的季独文本我当Linux的条件下采取,将方面的文件在同一个文书夹下,输入make运行,完成后生成chain.o
main.o以及可执行文件main,运行make clean清除三单编译生成的文书。

                                                    
           

main: chain.o main.o    #生成main依赖的文件
#执行命令cc chain.o main.o -o main生成最终的可执行文件main
    cc chain.o main.o -o main
main.o: main.c chain.h    #生成main.o依赖的文件

chain.o: chain.c chain.h    #生成chain.o依赖的文件

#删除生成的中间文件
clean:    
    rm *.o main

                |——main.c  调用、测试实现的函数

                                          –与链表无关纯属矫情

main.c

  说到链表之前,就想先说一样下蛋线性表。线性表是无与伦比基本、也是最好常用的一样种植数据结构。一个线性表是大半独数据的成团,除了第一单跟结尾一个数码元素之外,其它数据元素还是首尾相接的。线性表有点儿种植存储方,一种是顺序存储结构,另一样种植是链式存储结构。

#ifndef _CHAIN_H_
#define _CHAIN_H_

/*声明一些数据类型*/
typedef int datatype;//声明链表存储的数据类型
typedef unsigned short uint16;
typedef unsigned char bool;
/*返回结果*/
typedef enum
{
    TRUE,
    FALSE
}bool_val;

/*声明链表节点*/
typedef struct node
{
    datatype data;
    struct node* next;
}ListNode;

/*声明链表头*/
typedef struct head
{
    char info[20];
    unsigned short length;
    ListNode* next;
}ListHead;

/*一下为一些链表操作函数的声明*/
ListHead* CreateList();//创建链表
bool ViewList(ListHead* head);//遍历链表
bool AddNodeByLoc(ListHead* head, uint16 loc, datatype data);//在指定位置添加节点
bool DelNodeByLoc(ListHead* head, uint16 loc);//删除指定位置的节点
bool ModNodeByLoc(ListHead* head, uint16 loc, datatype data);//修改指定位置的节点数据
datatype FindDataByLoc(ListHead* head, uint16 loc);//返回指定位置的节点数据
bool DestoryList(ListHead* head);//销毁链表



#endif

  我们常因此的数组就是一致种典型的顺序存储结构。链表就是脚要详细说的链式存储结构。

  整个程序由三个文本组成Chain——chain.h  存放有项目、函数等之宣示

  链式存储结构即是附近之星星点点只要素以内存中未肯定相邻,这种囤方的亮点是单纯需要操作指针就得长去元素,比较有利,时间复杂度为O(1);另外一个优点就是是节约内存,元素以得加上的时刻才开辟内存,不待的当儿即便释放,也非需事先预估元素的多寡,相对于顺序存储结构使活许多。缺点就是是寻找的算法比较少,一般只能通过遍历查找,时间复杂度为O(n),还有一个弱点就是是申请或释放内存会消耗时间,如果频繁的对内存申请释放,消耗的时光是不行惊人之。

                |——chain.c  存放函数的现实性实现

  如齐图所示就是一个由于四单节点组成的但为链表,其中每个Data和Next为一个节点,第一个节点称为头节点,最后一个节点称为尾节点,Head为一个对头节点的指针。Data也节点的值域,用来存放数据;Next为节点的指针域,指向下一个节点。尾节点的指针域为空。

  以下为main.c文件

  

  顺序存储结构即是个别独相邻之素在内存中也是隔壁的,这种囤方的助益是查询比有利,通过首地址与偏移量就好拜到某元素,匹配的搜算法为产生很多,最抢之得达到O(logn)。缺点是插删除很无便宜,复杂度最深能落得O(n),例如你想在某个位置插入/删除元素,你用用以此岗位后的保有因素都晚转移/前移一号。另外一个休便宜之地方是因素数量的确定,必须以采用前创办一个足够深之数组放置有的元素,但是开辟的数组空间屡无克充分的下造成资源浪费。

               

  如果不行不习惯吗足以一直运行编译命令gcc main.c chain.c -o
main当然为堪直接复制三个公文之始末一直在VC6.0下运行,效果是同等的。

#include <stdio.h>
#include "chain.h"

int main()
{
    int i = 0;
    ListHead* head =  NULL;
    head = CreateList();//创建链表

    printf("Now we will Add four Nodes\n");
    for(i = 1; i < 5; i++)
    {
        AddNodeByLoc(head, i, i);//添加链表节点
    }
    ViewList(head);//遍历链表

    printf("Now we will Delete the third Node\n");
    DelNodeByLoc(head, 3);//删除链表的第三个节点
    ViewList(head);

    printf("Now we will modify the third Node to 5\n");
    ModNodeByLoc(head, 3, 5);//将第三个节点的信息修改为5
    ViewList(head);

    printf("Now we will view the second Node\n");
    printf("%d\n",FindDataByLoc(head, 2));//查看第二个节点的数据
    DestoryList(head);//销毁链表
}

MakeFile

  下面是链表运行的结果

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "chain.h"

/*创建链表*/
ListHead* CreateList()
{
    ListHead* head =  NULL;
    head = (ListHead*)malloc(sizeof(ListHead));    //申请内存
    memset(head, 0, sizeof(head));

    /*初始化链表信息*/
    head -> length = 0;
    strcpy(head -> info, "CangLing's List");
    head -> next = NULL;
    return head;
}

/*遍历链表*/
bool ViewList(ListHead* head)
{
    /*合法性判断*/
    if(head == NULL)
    {
        return FALSE;
    }
    ListNode* p = NULL;

    /*打印链表信息*/
    printf("The List Info is %s\n",head -> info);
    printf("The List Length is %d\n",head -> length);

    /*输出节点内容*/
    p = head -> next;
    while(p != NULL)
    {
        printf("%d\n",p -> data);
        p = p -> next;
    }

    return TRUE;
}

/*根据位置添加节点,大于链表长度的位置添加在链表末尾*/
bool AddNodeByLoc(ListHead* head, uint16 loc, datatype data)
{
    /*合法性判断*/
    if((head == NULL) || (loc == 0))
    {
        return FALSE;
    }

    bool_val ret = FALSE;
    ListNode* node = head -> next;
    ListNode* tmp = NULL;
    /*初始化要创建的节点*/
    ListNode* p = (ListNode*)malloc(sizeof(ListNode));
    p -> data = data;
    p -> next = NULL;

    if(head -> length == 0)//对只有头节点的链表进行处理
    {
        head -> next = p;
        p -> next = NULL;
    }
    else if(loc <= head -> length)//对1<loc<length的情况进行处理
    {
        /*添加在头节点之后*/
        if(loc == 1)
        {
            head -> next = p;
            p -> next = node;
        }
        else
        {
            /*寻找对应位置的前一个节点*/
            while(loc > 2)
            {
                loc--;
                node = node -> next;
            }
            tmp = node -> next;//保存loc位置的节点地址
            node -> next = p;//将要添加的节点放在loc位置
            p -> next = tmp;
        }

    }
    else//对loc>length的情况进行处理
    {
        while(node -> next != NULL)
        {
            node = node -> next;
        }

        node -> next = p;
    }

    head -> length++;//修改链表信息
    ret = TRUE;

    return ret;

}

/*删除loc位置的节点*/
bool DelNodeByLoc(ListHead* head, uint16 loc)
{
    /*进行合法性判断*/
    if((head == NULL) || (loc == 0) || (loc > head -> length))
    {
        return FALSE;
    }

    bool_val ret = FALSE;
    ListNode* tmp = head -> next;
    ListNode* freenode = NULL;

    if(loc == 1)//针对第一个节点的处理
    {
        freenode = tmp;
        head -> next = tmp -> next;
    }
    else//对1<loc<length的情况进行处理
    {
        while(loc > 2)//找到loc的前一个节点
        {
            loc--;
            tmp = tmp -> next;
        }

        freenode = tmp -> next;//保存要释放的节点地址
        tmp -> next = freenode -> next;
    }

    /*释放节点并修改链表信息*/
    free(freenode);
    head -> length --;

    return ret;
}

/*修改loc位置的节点信息*/
bool ModNodeByLoc(ListHead* head, uint16 loc, datatype data)
{
    /*合法性判断*/
    if((head == NULL) || (loc == 0) || (loc > head -> length))
    {
        return FALSE;
    }
    bool_val ret = FALSE;
    ListNode* tmp = head -> next;

    while(loc > 1)//找到loc节点
    {
        tmp = tmp -> next;
        loc --;
    }

    tmp -> data = data;//修改节点数据
    return ret;
}

/*返回loc节点的数据*/
datatype FindDataByLoc(ListHead* head, uint16 loc)
{
    /*合法性判断*/
    if((head == NULL) || (loc == 0) || (loc > head -> length))
    {
        return FALSE;
    }
    datatype ret = 0;
    ListNode* tmp = head -> next;

    while(loc > 1)//找到loc节点
    {
        tmp = tmp -> next;
        loc --;
    }

    ret = tmp -> data;

    return ret;
}

bool DestoryList(ListHead* head)
{
    ListNode* p = NULL;
    ListNode* node = NULL;
    if(head == NULL)
    {
        return TRUE;
    }

    /*释放除头节点之外的节点*/
    p = head -> next;

    while(p != NULL)
    {
        node = p;
        p = p -> next;
        free(node);
    }

    /*释放头节点*/
    free(head);

    return TRUE;
}

   网上关于链表的章很多,比自己形容的好之先辈也多不胜数。工作同年连续感到前面学的末尾忘,于是就生了写博客的想法,把好的劳作学习过程记下来互勉。思来怀念去要将链表作为自身之处女博吧,毕竟这是自身踏入程序员路上写的率先独数据结构,以下内容在令人不安、羞射的心思下编制。如果有啊不克忍心的地方迎大家指正!

chain.c

  以下为chain.h文件