首页 文章

没有外键常量的实体框架关系

提问于
浏览
0

(注意 - 我无法控制数据库及其表格) .

举一个我的问题的例子:

表A上有ID(PK)和CreateDate表B上有ID(PK)和A_ID

A_ID不是外键,但表B需要从表A获取create_date . 如何在Entity Framework中执行此操作?

不确定这是否相关但A可以有0或许多B和B只能有A中的一个

编辑:忘记提及使用Fluent API

编辑2:我已经尝试映射这两个表 .

我将公共虚拟A a {get; set}添加到B的实体模型中 .

然后从那里,到实体配置,我尝试了几个不同的东西,如HasRequired(x => xA).WithOptional()和HasRequired(x => xA).WithMany() . HasForeignKey(x => x.A_ID )(尽管有很多是错的,但这是我看到如何指定外键的唯一方法,也知道没有外键) . 我还添加了HasKey(x => x.A_ID),但这对我来说似乎并不合适 .

基本上,我尝试了各种类型的Has和With . 我对实体框架流畅的api仍然很陌生,但我搜索了互联网并发现了类似的问题,但不足以帮我提出答案 . 大多数情况下,我发现'这是不可能的'类型答案 .

在进行连接方面,如果我弄错了,请纠正我,这不是流畅的api而且它不会将表格映射到对方吗?我只是加入我的方法中的表格?

编辑3:实体模型和实体配置到目前为止,删除了不必要的东西和更改了事物的名称(但除此之外它完全准确)

public class A
{
    /// <summary>
    ///     ID
    /// </summary>
    public virtual int ID { get; set; }

    /// <summary>
    ///     Relationship to B
    /// </summary>
    public virtual B b { get; set; }
}

public class B
{
    /// <summary>
    ///     ID of B
    /// </summary>
    public virtual int ID { get; set; }

    /// <summary>
    ///     Name of B
    /// </summary>
    public virtual string Name { get; set; }

    /// <summary>
    ///     DateTime B is created
    /// </summary>
    public virtual DateTime? DateTime { get; set; }
}

    public AConfiguration()
    {
        Property(x => x.ID).HasColumnName("a_id");
        Property(x => x.B_ID).HasColumnName("b_id");

        HasKey(x => x.ID);

        ToTable("a", "safe");
    }

    public BConfiguration()
    {
        Property(x => x.ID).HasColumnName("b_id");
        Property(x => x.DateTime).HasColumnName("b_datetime");
        HasKey(x => x.ID);

        ToTable("b", "safe");
    }

1 回答

  • 1

    如果您在使用导航属性的流畅映射时遇到问题,请尝试创建具有外键的示例数据库,并从中生成代码优先模型 . 那应该会告诉你正确的配置 .

相关问题