实体框架将主键定义为另一个实体的外键

时间:2017-04-26 00:26:46

标签: c# entity-framework ef-code-first code-first

我已经阅读了一些答案,但没有弄清楚我的情况......

假设我有BaseEntity这样的课程:

public abstract class BaseEntity<TKey> : IEntity<TKey>
{
    /// <summary>
    /// Gets or sets the key for all the entities
    /// </summary>
    [Key]
    public TKey Id { get; set; }
}

我的所有实体都源于此:

public class A : BaseEntity<Guid> {
    // ...props
} 

所以,当我尝试创建一个实体,将其主键作为另一个实体时,我收到错误

  

EntityType'X'没有定义键。定义此EntityType的密钥。

我的代码:

 public class X : BaseEntity<A> { // <-- doesn't accept it
    // ...props
} 

我做错了什么?

为什么不接受这种关系?

1 个答案:

答案 0 :(得分:0)

如果你想PK也是FK到另一个实体,你应该这样做:

public abstract class BaseEntity<TKey> : IEntity<TKey>
{
    //[Key] attribute is not needed, because of name convention
    public virtual TKey Id { get; set; }
}

public class X : BaseEntity<Guid>//where TKey(Guid) is PK of A class
{
    [ForeignKey("a")]
    public override Guid Id { get; set; }
    public virtual A a { get; set; }
}