问问EF 3.5的一个怪问题

cacaca6 2010-10-26 03:17:51
废话不多说

我有一个数据库PropertyManage,其中有2个表,定义如下:


CREATE TABLE [dbo].[FileStorages](
[Id] [int] IDENTITY(1,1) NOT NULL,
[CaseNumber] [int] NOT NULL,
[LayerNumber] [int] NOT NULL,
[FolderNumber] [int] NOT NULL,
[FolderPieceNumber] [int] NOT NULL,
CONSTRAINT [PK_FileStorages] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]


------------------------

CREATE TABLE [dbo].[Elements](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ImageFileName] [nvarchar](max) NOT NULL,
[CreateDateTime] [datetime] NOT NULL,
[IsEliminated] [bit] NOT NULL,
[PageNumber] [int] NOT NULL,
[FileStorage_Id] [int] NOT NULL,
CONSTRAINT [PK_Elements] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Elements] WITH CHECK ADD CONSTRAINT [FK_ElementFileStorage] FOREIGN KEY([FileStorage_Id])
REFERENCES [dbo].[FileStorages] ([Id])
GO

ALTER TABLE [dbo].[Elements] CHECK CONSTRAINT [FK_ElementFileStorage]
GO

-----------------------

两个表,分别是[Elements]和[FileStorages],从上边的定义可以看出,Elements有一个Foreign Key指向FileStorages,它们之间的关系是1对多,也就是说,一个FileStorages可以拥有多个Elements

很简单的一种表关系,那么在VS2008中,我建立了一个Console Application,然后用Entity Framework把这两个表倒影射进来,Entity Model的名字叫PropertyManageEntities,然后写一段程序,如下:

public static void Lab1()
{
using (var context = new PropertyManageEntities())
{
foreach (var x in context.FileStorages)
{
foreach (var z in x.Elements)
{
Console.WriteLine(z.ID);
}
}
}
}

很简单的一段程序,就是想打印每个FileStorages里面每一个Element的ID,可是这段程序就是不工作,我把断点设在
Console.WriteLine(z.ID)上面,结果系统根本不进去,真是令我瞠目结舌

我用EF4.0在VS2010下面跑了一下,一点问题都没有,就是上面一模一样的程序,这到底是怎么回事?为什么同样的程序在EF3.5下面不运行?

我该怎么设置?

多谢
...全文
80 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cacaca6 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lkj7b226 的回复:]

在3.5中你可以通过这句
FileStorages.ElementsReference.Load();
显示加载FileStorages的外键表数据,然后在使用它。
[/Quote]

这位高人,多谢啊,真是山外有山,人外有人,我还以为这个问题无解了呢。等明天结贴

再次感谢
lkj7b226 2010-10-28
  • 打赏
  • 举报
回复
在3.5中你可以通过这句
FileStorages.ElementsReference.Load();
显示加载FileStorages的外键表数据,然后在使用它。
lkj7b226 2010-10-28
  • 打赏
  • 举报
回复
在4.0中的EDM中你会看到这么一句话:
this.ContextOptions.LazyLoadingEnabled = true;
也就是延迟加载,在你使用外键的时候才去加载外键表。而3.5中是默认不加载的,你必须手动显示加载
否则x.Elements是Null值
cacaca6 2010-10-27
  • 打赏
  • 举报
回复
难道,这个问题没有人遇到过吗?

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧