2015-02-27 3 views
0

Я пытаюсь настроить внешний ключ, используя следующие два класса. Я хочу использовать pAcqType как перечисление и хранить имена типов в другой таблице. Как мне настроить мои классы для этого?Отношение внешних ключей

public class Property 
{ 
    [Key] 
    public int pID { get; set; } 
    public string pAddress { get; set; } 
    public string pCounty { get; set; } 
    public string pCity { get; set; } 
    public string pState { get; set; } 
    public string pzip { get; set; } 
    public virtual PropertyAcquisitionType pAcqType { get; set; } <-- foreign key  
} 

public class PropertyAcquisitionType 
{ 
    [Key]   
    public int patID { get; set; }   
    public string patName { get; set; } 
} 

UPDATE

Дэн заставил меня задуматься. И я попробовал следующее, и, похоже, это сработало. Он устанавливает внешний ключ на столе, как я хотел. И он даже не попросил обратного на другом столе.

public int? pAcqType { get; set; } 
    [ForeignKey("pAcqType")] 
    public PropertyAcquisitionType patID { get; set; } 

ответ

1

Требуется ли внешний ключ (NOT NULL в базе данных)?

public int pAcqTypeId { get; set; } 
[ForeignKey("pAcqTypeId")] 
public virtual PropertyAcquisitionType pAcqType { get; set; } 

В противном случае,

public int? pAcqTypeId { get; set; } 
[ForeignKey("pAcqTypeId")] 
public virtual PropertyAcquisitionType pAcqType { get; set; } 

Затем в другом классе, добавить обратную связь:

public class PropertyAcquisitionType 
{ 
    [Key]   
    public int patID { get; set; }   
    public string patName { get; set; } 
    [InverseProperty("pAcqType")] 
    public virtual ICollection<Property> pOfThisType { get; set; } 
} 

Вот один способ, которым Вы могли бы определить отношения с помощью текучего API (без атрибутов в классах сущностей). Обратите внимание, с помощью этого метода, вам не нужно, чтобы добавить properties собственности на PropertyAcquisitionType объекта, чтобы удовлетворить обратную сторону отношений, потому что .WithMany() говорит EF, что он должен знать:

public class MyDbContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Property>() 
      .HasKey(x => x.pID) 
      .HasRequired(x => x.pAcqType) // or HasOptional if using int? 
      .WithMany() // or WithMany(x => x.pOfThisType) if you want to add/keep the inverse property 
      .HasForeignKey(x => x.pAcqTypeId) 
     ; 
    } 
} 
+0

Невозможно определить основной конец ассоциации между типами hoahelp.Models.PropertyAcquisitionType 'и' hoahelp.Models.Property '. Основной конец этой ассоциации должен быть явно сконфигурирован с использованием либо свободного API API, либо аннотаций данных. – Prescient

+0

это придирчиво. Свойство ForeignKeyAttribute в свойстве «pAcqType» в типе «hoahelp.Models.Property» недопустимо. Имя внешнего ключа «PropertyAcquisitionTypeId» не было найдено в зависимом типе «hoahelp.Models.Property». Значение Name должно быть разделенным запятыми именами свойств внешнего ключа. – Prescient

+0

@Prescient вы назвали свойство 'PropertyAcquisitionTypeId', или вы назвали его чем-то вроде' pAcqTypeId'? Значение в строке должно соответствовать имени свойства в классе. Если вы назвали его 'pAcqTypeId', тогда вы должны использовать' [ForeignKey ("pAcqTypeId")] ' – danludwig

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