C# 代码优先-实体框架-如何公开外键

C# 代码优先-实体框架-如何公开外键,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我有以下数据对象: public class Customer : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<Customer> { public Customer () { // this.HasRequired(a => a.EyeColorType).WithMany().HasForeignKey(a => a.EyeColorTypeID);

我有以下数据对象:

public class Customer : System.Data.Entity.ModelConfiguration.EntityTypeConfiguration<Customer>
{
    public Customer ()
    {
        // this.HasRequired(a => a.EyeColorType).WithMany().HasForeignKey(a => a.EyeColorTypeID);
    }

    [Key]
    public int ID { get; set; }

    [Required]
    [MaxLength(100)]
    public string FirstName { get; set; }

    [Required]
    [MaxLength(100)]
    public string LastName { get; set; }

    [Required]
    [ForeignKey("EyeColorTypeID")]
    public EyeColorType EyeColorType { get; set; }
    // public int EyeColorTypeID { get; set; }

}
公共类客户:System.Data.Entity.ModelConfiguration.EntityTypeConfiguration
{
公众客户()
{
//this.HasRequired(a=>a.EyeColorType).WithMany().HasForeignKey(a=>a.EyeColorTypeID);
}
[关键]
公共int ID{get;set;}
[必需]
[MaxLength(100)]
公共字符串名{get;set;}
[必需]
[MaxLength(100)]
公共字符串LastName{get;set;}
[必需]
[ForeignKey(“EyeColorTypeID”)]
公共EyeColorType EyeColorType{get;set;}
//public int eyecortypeid{get;set;}
}
}

我试图做的是在生成的Customer属性上公开字段
eyecortypeid
,并在DB中指定名称

如果我删除这两个注释,它就可以工作,但我想为此使用一个数据注释。类似于
[ExposeForeignKey(“EyeColorTypeID”)]
的东西,让一切自动发生


这可能吗?我该怎么做呢?

只需将其添加到模型中,并将导航属性设置为虚拟(用于延迟加载):


EF的命名约定将
EyeColorTypeID
绑定到
EyeColorType
导航属性。

您需要添加
public Int32 EyeColorTypeID
(或者您的密钥是什么数据类型)。谢谢我的意思是包括这一点。我现在已将它添加到上述问题中。基本上,我仍然需要顶部的注释行来实际公开它,所以我可以说myContext.Customers.First().eyecortypeid=1;否则它只会给我myContext.Customers.First().EyeColorType=someEyeColorTypeInstance;绑定部分很好,我只想公开外部ID字段,可能您可以使用PostSharp进行此操作。很抱歉,我在最初的问题中遗漏了这一点。我现在已经添加了它。是的,我可以这样做,但我需要顶部(注释掉)将其暴露在对象上。如何仅使用数据注释来实现这一点?您使用的是哪个EF版本?我从不需要使用used
.HasForeignKey
调用。另一方面,我也不需要使用
:EntityTypeConfiguration
。对我来说,一个
public int FooId
和一个
public VIRTUAL Foo类Foo
就足够了。是的,我可以在没有接口的情况下创建一个类,并按照您的建议将属性ID放入其中,但是它不会在我的类中显示为属性。它会使它变盲,并在数据库中为它提供正确的名称,但我只能点到实例,而不能点到ID int。也许您忘记了将它设置为
public
,如果
int
public
,它必须在
类中。
public class Customer : //etc
{

   //your stuff

   [Required]
   public int EyeColorTypeID {get; set;}

   public virtual EyeColorType EyeColorType { get; set; }
}