Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体拉入大量不在我的查询中的表_C#_Entity Framework 4.1_Ef Code First - Fatal编程技术网

C# 实体拉入大量不在我的查询中的表

C# 实体拉入大量不在我的查询中的表,c#,entity-framework-4.1,ef-code-first,C#,Entity Framework 4.1,Ef Code First,我们的模式中有一个表规范化数据,我们称之为DataPart。大致上,它的定义是: DataPart -------- DataPartId int Message varchar(200) CreatedDate datetime POCO与此匹配: public class DataPart { public long DataPartId {get; set;} public string Message {get; set;} public Dat

我们的模式中有一个表规范化数据,我们称之为DataPart。大致上,它的定义是:

DataPart
--------
DataPartId   int
Message      varchar(200)
CreatedDate  datetime
POCO与此匹配:

public class DataPart {
    public long DataPartId {get; set;}
    public string Message {get; set;}
    public DateTime CreatedDate {get; set;}

    public virtual ICollection<Album> Albums {get; set;}
    public virtual ICollection<Comment> Comments {get; set;}
    public virtual ICollection<Post> Posts {get; set;}
    // and so on...
}
由于有导航属性Album、Comment、Post都使用DataPart,因此我们必须使用模型生成器设置主键和键映射属性:

modelBuilder
    .Entity<DataPart> ()
    .HasOptional (x => x.Album)
    .WithOptionalPrincipal (x => x.DataPart);

modelBuilder
    .Entity<DataPart> ()
    .HasOptional (x => x.Comment)
    .WithOptionalPrincipal (x => x.DataPart);

modelBuilder
    .Entity<DataPart> ()
    .HasOptional (x => x.Post)
    .WithOptionalPrincipal (x => x.DataPart);

// and so on...
我编写了以下LINQ到实体查询:

var query =
    from DataPart dp in db.DataParts
    where dp.CreationDate >= dateFrom && dp.CreationDate <= dateTo;
LINQPad显示了它对所有设置为导航属性的表执行左外部联接,即使这些表中没有一个实际使用此查询拉入

我认为我的问题是modelBuilder节,但我不确定我做错了什么。每个相册/评论/帖子都需要一个DataPart,但DataPart只与20种奇怪类型的对象中的一种相关。我已经做了。按要求,结果是一样的


编辑:如果我真的选择了我需要的信息,问题就消失了。

haspoptional只声明您的DataPart可以有0个或更多相关的Album/Comment/Post项,并且外键可以为空,因此左外联接相当于返回所有DataPart加上0个或更多联接的表项

LINQ查询返回DataPart对象。这些对象具有指向您在执行的db查询中看到的表的导航属性。这些导航属性的数据需要在初始db查询中立即加载,或者在第一次访问或手动加载属性时延迟加载-有关加载详细信息,请参阅


如果不希望它们显示在初始db查询中,请为这些导航属性启用延迟加载。

这就是EF在配置一对一关系时的行为方式。当您查询主体实体时,它将加入所有可选的一对一依赖项,以了解它们是否存在

当DataPart类的片段不期望映射一对一关系时,为什么要尝试映射它?当前映射与显示的类不兼容。

LazyLoading已启用:db.Configuration.LazyLoadingEnabled=true。同样的问题。思想?