【发布时间】:2017-10-27 12:23:36
【问题描述】:
(注意 - 我无法控制数据库及其表)。
举一个我的问题的例子:
表 A 上有 ID (PK) 和 CreateDate 表 B 上有 ID (PK) 和 A_ID
A_ID 不是外键,但表 B 需要从表 A 中获取 create_date。如何在实体框架中执行此操作?
不确定这是否相关,但 A 可以有 0 个或许多 B 和 B 只能有一个 A
编辑:忘记提及使用 Fluent API
编辑 2:我已经尝试映射这两个表。
我在 B 的实体模型上添加了公共虚拟 A {get;set}。
然后从那里,到实体配置,我尝试了一些不同的东西,例如 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");
}
【问题讨论】:
-
所以你想要一个约束,但不在数据库上?
-
我认为答案是肯定的。我想将 a_id 视为外键,即使数据库没有(它应该是,但由于某种原因它不是这样设置的)。
-
你有没有尝试过?如果没有,你应该。如果是,您应该告诉我们哪些地方没有按预期工作。
-
为什么不能使用简单的连接?
-
或 lambda 函数,这是最简单的事情,你还没有表现出任何努力:
db.tableB.FirstOrDefault( t => t.id_a == id_your_checking_from_tableA);所以开始编码并返回卷轴问题
标签: entity-framework ef-fluent-api