Linq to sql 使用1对多和多对多关系加载LINQ到SQL

Linq to sql 使用1对多和多对多关系加载LINQ到SQL,linq-to-sql,eager-loading,Linq To Sql,Eager Loading,我刚开始使用LINQtoSQL,我遇到了一个问题 这是我的模型的一部分: 访问>访问产品访问示例访问状态 我想用所有相关实体加载访问实体,但它给了我一个InvalidCastexception,我使用以下代码: using (TeamsExcellenceDataContext context = new TeamsExcellenceDataContext()) { DataLoadOptions lo = new DataLoadOptions();

我刚开始使用LINQtoSQL,我遇到了一个问题

这是我的模型的一部分:

访问>访问产品<产品 访问>访问示例<产品 访问>访问状态 我想用所有相关实体加载访问实体,但它给了我一个InvalidCastexception,我使用以下代码:

using (TeamsExcellenceDataContext context = new TeamsExcellenceDataContext())


{


            DataLoadOptions lo = new DataLoadOptions();
            context.DeferredLoadingEnabled = false;
            lo.LoadWith<Visit>(v => v.Visitstatus);
            lo.LoadWith<Visit>(v => v.VisitProducts);
            lo.LoadWith<Visit>(v => v.VisitSamples);

            context.LoadOptions = lo;
            var temp = (from v in context.Visits
                   where v.VisitID == visitID
                   select v).Single();
            Visit v = temp;
        }
如果省略这一行,则不会发生异常:

lo.LoadWith<Visit>(v => v.Visitstatus);
或者这些线路中的任何一条

lo.LoadWith<Visit>(v => v.VisitSamples);
lo.LoadWith<Visit>(v => v.VisitProducts);

我做错了什么,或者如何解决这个问题?

问题是抛出了异常InvalidCastexception,因为表Visitstatus的主键是tinyint类型,显然Linq To SQl在这个DB数据类型上有问题,所以我将tinyint类型改为int,它可以工作


因此,这里提出了一个问题:如果不允许我更改数据库设计,或者使用数据库类型tinyInt是至关重要的,有什么解决办法吗?

那么您应该在模型中使用byte作为类型,而不是int。tinyInt转换为byte。
lo.LoadWith<Visit>(v => v.VisitSamples);
lo.LoadWith<Visit>(v => v.VisitProducts);