2013-05-06 4 views
1

Я хотел бы создать ассоциацию собственности со следующей установкой:В Entity Framework, как мне создать свойство ассоциации в коде?

public class ClassType1{ 
    [Key] 
    public int type1_ID { get;set; } 
    public int type2_ID { get;set; } // In database, this is a foreign key linked to ClassType2.type2_ID 
    public ClassType2 type2Prop { get;set; } 
} 

public class ClassType2{ 
    [Key] 
    public int type2_ID { get;set; } 
} 

Моя проблема заключается в том, что type2Prop не может найти это Foregin ключ. Он пытается найти «type2Prop_ID», которого не существует, когда он действительно должен искать «type2_ID». Вот ошибка, которую я получаю:

{"Invalid column name 'type2Prop_ID'."} 

Как указать, какое свойство использовать в качестве ключа ClassType2?

+0

вы используете код EF первым? – Floremin

+0

Я так думаю, но я не уверен. Это проблема нашей отрасли. У меня никогда не было формального образования в EF, потому что, когда я снова учился в школе, EF еще не существовал! – Bill

ответ

3

Попробуйте ForeignKeyAttribute на type2Prop:

using System.ComponentModel.DataAnnotations.Schema; 

public class ClassType1 
{ 
    [Key] 
    public int type1_ID { get; set; } 

    public int type2_ID { get; set; } // In database, this is a foreign key linked to ClassType2.type2_ID 

    [ForeignKey("type2_ID")] 
    public virtual ClassType2 type2Prop { get; set; } 
} 

public class ClassType2 
{ 
    [Key] 
    public int type2_ID { get;set; } 
} 

Вы также можете сделать это с помощью Fluent API в Refactor доказательство способом (то есть, если вы измените название вашего имущества в будущем, компилятор позволит вы знаете, что вам тоже нужно изменить отображение). Это немного уродливое для простых случаев, подобных этому, но оно также более надежное. В вашем DbContext классе, вы можете добавить что-то вроде:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<ClassType1>().HasRequired(x => x.type2Prop) 
            .WithMany() 
            .HasForeignKey(x => x.type2_ID); 
} 
+0

Yup, хорошо выглядит. – Bill

0
public class ClassType1{ 
    [Key] 
    public int type1_ID { get;set; } 
    [ForeignKey("type2Prop")] 
    public int type2_ID { get;set; } // In database, this is a foreign key linked to ClassType2.type2_ID 
    public ClassType2 type2Prop { get;set; } 
} 

public class ClassType2{ 
    [Key] 
    public int type2_ID { get;set; } 
} 
+0

Пожалуйста, добавьте немного больше вещества в свой ответ. Ответы только на код обычно обескуражены. – gunr2171

Смежные вопросы