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; }
}