我是ASP.NET和EF的新手,但拥有Ruby MVC经验。我正在开发一个具有一对多关系的复杂应用程序,因此我创建了一个小型项目,我可以使用它并测试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 :(得分:1)
您可能希望使用“public virtual ICollection”而不是“public List”。但是,你写的内容看起来不错。
public virtual ICollection<Guitar> Guitars{ get; set; }
使用“公共虚拟ICollection”的原因是获得延迟加载支持。来自吉他手,摇滚乐!
答案 1 :(得分:1)
您设置POCO的方式似乎没问题。 Code First将自行完成FK技巧。
将您的List<T>
设置为虚拟,以便EF可以使用Lazy Loading
!
如果您确实要设置,请在DAL使用Fluent API:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<Guitarist>().HasRequired(p => p.Guitar).WithMany(b => b.Amplifier)
}
好主意,顺便说一句!