C# EF 4.1生成字段[Name]\u Id而不是[Name]Id,FK相关问题

C# EF 4.1生成字段[Name]\u Id而不是[Name]Id,FK相关问题,c#,entity-framework,foreign-keys,C#,Entity Framework,Foreign Keys,我有这样的课: public class Target { [Key] [Column("TargetId")] public Guid Id { get; set; } [ForeignKey("TargetInventory")] public Guid? TargetInventoryId { get; set; } public virtual TargetInventory TargetInventory { get; set; }

我有这样的课:


public class Target
{
    [Key]
    [Column("TargetId")]
    public Guid Id { get; set; }

    [ForeignKey("TargetInventory")]
    public Guid? TargetInventoryId { get; set; }
    public virtual TargetInventory TargetInventory { get; set; }
}
仅在DbContext上:


protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove();
}
在数据库中,我有名为“FK_Target_TargetInventory”的FK和字段“TargetInventoryId”

在EF 4中,它可以工作,但在4.1中,它会生成无效的字段名“TargetInventory_Id”,而不是“TargetInventoryId”。例外情况:

查询“GetAll”的加载操作失败。执行命令定义时出错。有关详细信息,请参见内部异常。内部异常消息:列名“TargetInventory\u Id”无效。 有什么不对劲吗

编辑1

代码标记呈现不好(我想您可以理解它的含义): modelBuilder.Conventions.Remove(); 我以前没用过fluent,而且很管用,我不想在主课之外有逻辑。
现在我将尝试各种测试,因为我发现类似的代码在不同的类中工作。

您正在删除什么约定?不要触碰惯例。它们负责FK属性与导航属性的自动配对,还负责将数据注释转换为映射。如果代码意味着要删除所有约定,则必须使用fluent API配置所有约定。

要删除的约定是什么?不要触碰惯例。它们负责FK属性与导航属性的自动配对,还负责将数据注释转换为映射。如果您的代码意味着要删除所有约定,则必须使用fluent API配置所有内容。

您好,我更新了我的帖子。另外,关于删除约定,我添加了这一行,以消除与DB recreate或smth类似的异常。由于这种关系是双向的一对多关系,因此它可以像您在这里所写的那样工作。代码中有一些地方是单向的,在不流畅的情况下可以工作。那么发生了什么事,我现在必须使用它?嗨,我更新了我的帖子。另外,关于删除约定,我添加了这一行,以消除与DB recreate或smth类似的异常。由于这种关系是双向的一对多关系,因此它可以像您在这里所写的那样工作。代码中有一些地方是单向的,在不流畅的情况下可以工作。那么发生了什么事,我现在必须使用它?