没有外键连接的实体框架关系



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

举一个我的问题的例子:

表 A 具有 ID (PK) 和创建日期 表 B 具有 ID (PK) 和A_ID

A_ID 不是外键,但表 B 需要从表 A 获取create_date。如何在实体框架中执行此操作?

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

编辑:忘了提到使用Fluent API

编辑2:我尝试映射两个表。

我添加了公共虚拟 A a {get;将}设置为B的实体模型。

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

基本上,我尝试了每种类型的有和有。我对实体框架流畅的 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");
}

如果在使用 Navigation 属性的流畅映射时遇到问题,请尝试创建一个具有外键的示例数据库,并从中生成代码优先模型。 这应该向您显示正确的配置。

对我有用的是:

在 A 中:

public int ID { get; set; }

在 B 中:

public int A_ID { get; set; }
public virtual A A { get; set; }

在 B 的实体生成器中:

builder
.HasOne(b => b.A)
.HasMany()
.HasForeignKey(b => b.A_ID)
// I'm assuming you already have A's primary key set up.
// If not, add .HasPrincipalKey(a => a.ID)

不过,我强烈建议DBA 唠叨添加缺少的外键,因为当您像这样伪造它们时,不良数据可能会搞砸整个查询。

相关内容

  • 没有找到相关文章

最新更新