2017-05-26 82 views
0

(注意 - 我无法控制数据库及其表格)。无外键约束的实体框架关系

给出我的问题的一个例子:

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

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

不知道这是否是相关的,但一个可以有0个或多个B和B只能有一个

编辑之一:忘记用流利的API提

编辑2:我已经试过映射这两个表。

我在B的实体模型上添加了public virtual A {get; set}。 (x => xA).WithOptional()和HasRequired(x => xA).WithMany()。HasForeignKey(x => xA)返回实体配置, > 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"); 
    } 
+0

所以你想要一个约束,但不是在数据库上? – Stefan

+0

我认为答案是肯定的。我想把a_id当作外键,即使数据库没有(它应该是,但由于某种原因,它不是这样设置的)。 – sam

+0

你尝试过什么吗?如果没有,你应该。如果是的话,你应该告诉我们什么不按预期工作。 – Tipx

回答

0

如果您遇到了流畅的映射麻烦导航属性,请尝试创建一个示例数据库,确实有具有外键,并从中生成代码优先模型。这应该会告诉你正确的配置。

+0

这将是有益的,谢谢你的建议! – sam