c# – 实体框架:从哪里获取这些列?

前端之家收集整理的这篇文章主要介绍了c# – 实体框架:从哪里获取这些列?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_1@我们正试图让Entity框架在我们的商店中使用现有数据库(因此,更改数据库模式不是一个选项),并且我们为测试事物创建的单元测试显示了一些非常奇怪的行为.

这是它为我们拥有的特定对象吐出的sql

SELECT 
[Extent1].[CommentTypeId] AS [CommentTypeId],[Extent1].[DataPartId] AS [DataPartId],[Extent1].[CommentId] AS [CommentId],[Extent1].[CreatedTime] AS [CreatedTime],[Extent1].[Message] AS [Message],[Extent1].[From] AS [From],[Extent1].[Likes] AS [Likes],[Extent1].[SourceTypeId] AS [SourceTypeId],[Extent1].[StatusMessage_DataPartId] AS [StatusMessage_DataPartId],[Extent1].[Album_DataPartId] AS [Album_DataPartId]
FROM [dbo].[Comments] AS [Extent1]

正如您可能注意到的那样,请求的最后两列与其他列不同.那是因为它们实际上并不存在,我们不知道实体为什么要求它们!我们的配置文件和我们的POCO都没有提及它们.事实上,就我们的数据库而言,它们是完全独立的概念,并且根本没有直接相关.

从哪里获取这些列,以及如何告诉它将其删除

编辑:回答下面的一些问题,
1)我们正在使用Entity Framework 4.2.我们正在使用流畅的映射.

2)POCO本身看起来像是这样,为了简洁起见,切除了平等的混乱:

public long DataPartId { get; set; }
public string CommentId { get; set; }
public DateTime? CreatedTime { get; set; }
public string Message { get; set; }
public string From { get; set; }
public int? Likes { get; set; }
public string SourceTypeId { get; set; }
public int CommentTypeId { get; set; }

public virtual DataPart DataPart { get; set; }
public virtual CommentType CommentType { get; set; }

3)我们没有使用edmx.我们有一个自定义的DbContext.没有太多的线条非常有趣.这两个可能是有意义的:

Configuration.LazyLoadingEnabled = true;
    Configuration.ProxyCreationEnabled = true;

除此之外,Context文件很多

modelBuilder.Configurations.Add(new WhateverConfiguration())

public IDbSet<WhateverPoco> PocoDatabaseTableAccessor { get; set; }

4)我们从db-first开始,但是没有用,所以我们目前正在进行代码优先.

5)这是特定POCO的配置内容

Hasrequired (x => x.DataPart)
        .WithrequiredDependent (x => x.Comment);

    Hasrequired (x => x.CommentType)
        .WithMany (x => x.Comments)
        .HasForeignKey (x => x.CommentTypeId);

    HasKey (x => x.DataPartId);
    ToTable ("Comments","dbo");

解决方法

问题不在于您展示的映射或类.检查您的相册和StatusMessage类.他们是实体吗?它们被映射了吗?他们有评论的集合导航属性吗?如果是,EF希望Comment必须具有FK到这些表.如果表没有此类列,则无法在这些实体中映射这些导航属性.

顺便说一句.注释表中的id不应该是CommentId而不是DataPartId吗?

猜你在找的C#相关文章