【问题标题】:EF 4.1 generates field [Name]_Id instead of [Name]Id, FK related problemEF 4.1 生成字段 [Name]_Id 而不是 [Name]Id,FK 相关问题
【发布时间】:2011-06-27 09:23:12
【问题描述】:

我有这样的课:


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_Id”无效。

可能出了什么问题?

编辑 1

代码标签渲染不好(我想你可以理解它的意思): modelBuilder.Conventions.Remove>(); 我以前没有使用过 fluent 并且它有效,我不想在主类之外有逻辑。 现在我将尝试各种测试,因为我发现类似的代码在不同的类中工作。

【问题讨论】:

    标签: c# entity-framework foreign-keys


    【解决方案1】:

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

    【讨论】:

    • 嗨,我更新了我的帖子。另外关于约定删除,我添加了该行以消除与数据库重新创建或类似的东西相关的异常。
    • 由于这种关系是双向的一对多,它的工作原理就像你在这里写的link。代码中有一些地方是单向的,它可以在没有 FLUENT 的情况下工作。那么我现在必须使用它发生了什么?
    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    相关资源
    最近更新 更多