2013-10-03 4 views
1

Я новичок в ASP.NET и EF, но имею опыт работы с Ruby MVC. Я работаю над сложным приложением, которое имеет от одного до многих отношений, поэтому я создал небольшой проект, с которым я могу играть и тестировать генерация CodeFirst, и что может быть веселее, чем тестирование с помощью гитарного проекта! Все вы, музыканты, знакомы с отношением друг к другу, так как у одного гитариста есть несколько гитар и усилителей. Этот код работает в том, что он создает базу данных и таблицы, когда я засеваю их. Просто хотел бы получить советы о том, как это сделать лучше и какие-либо возможные ошибки?Создание модели CodeFirst с внешними ключами

Благодаря

namespace GuitarCollector.Models 
{ 
public class Guitarist 
{ 

    public Guitarist() 
    { 
     Guitars = new List<Guitar>(); 
     Amplifiers = new List<Amplifier>(); 
    } 

    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Email { get; set; } 
    public List<Guitar> Guitars { get; set; } 
    public List<Amplifier> Amplifiers { get; set; } 
} 

public class Guitar 
{ 
    //Primary Key 
    public int Id { get; set; } 
    //Foreign Key 
    public int GuitaristId { get; set; } 

    public int YearOfManufacture { get; set; } 
    public string Make { get; set; } 
    public string Model { get; set; } 
    public string Finish { get; set; } 
    public string SerialNumber { get; set; } 
    public double AppraisedValue { get; set; } 

    Guitarist Guitarist { get; set; } 
} 

public class Amplifier 
{ 
    //Primary Key 
    public int Id { get; set; } 
    //Foriegn Key 
    public int GuitaristId { get; set; } 

    public int YearOfManufacture { get; set; } 
    public int Wattage { get; set; } 
    public string Make { get; set; } 
    public string Model { get; set; } 
    public string SerialNumber { get; set; } 
    public double AppraisedValue { get; set; } 

    public Guitarist Guitarist { get; set; } 
} 

}

имен GuitarCollector.DAL { общественного класса GuitaristContext: DbContext {

public DbSet<Guitarist> Guitarists { get; set; } 
    public DbSet<Guitar> Guitars { get; set; } 
    public DbSet<Amplifier> Amplifiers { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    } 
} 

}

+0

Если вы хотите идентичностей для вас PK украшают с 'DatabaseGeneratedAttribute (DatabaseGeneratedOption.Identity)' Вам может понадобиться, чтобы украсить свои поля FK с 'ForeignKey («»)' атрибутами где '' является навигация собственности отношения. Если вы не планируете получать доступ к полям FK ID в своем приложении, их можно опустить из вашей модели – Moho

ответ

1

Способ настройки ваших POCO, похоже, в порядке. Код Сначала будет делать трюк FK сам по себе. Установите List<T> как виртуальный, чтобы EF мог использовать Lazy Loading!

Если вы действительно хотите установить, использовать Fluent API в вашем DAL:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    modelBuilder.Entity<Guitarist>().HasRequired(p => p.Guitar).WithMany(b => b.Amplifier) 
} 

Отличная идея, кстати!

1

Вы могли бы хотеть к нам e "public virtual ICollection", а не "публичный список". Однако то, что вы написали, выглядит хорошо.

public virtual ICollection<Guitar> Guitars{ get; set; } 

Причина использования «общедоступного виртуального ICollection» заключается в получении поддержки отложенной загрузки. Приближайтесь к коллеге-гитаристу, качайте!

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