首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用外键创建CodeFirst模型

用外键创建CodeFirst模型
EN

Stack Overflow用户
提问于 2013-10-03 20:49:33
回答 2查看 106关注 0票数 1

我刚接触过ASP.NET和EF,但有Ruby经验。我的工作是一个复杂的应用程序,有一个到多个关系,所以我创建了一个较小的项目,我可以发挥和测试的CodeFirst一代,什么可能比测试比吉他项目更有趣!你们所有的音乐家都知道一对多的关系,就像一个吉他手拥有几个吉他和扩音器一样。这段代码的工作原理是,当我启动它时,它会创建数据库和表--只是想知道如何更好地完成它和任何可能的问题?

谢谢

代码语言:javascript
复制
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 {

代码语言:javascript
复制
    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>();
    }
}

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-03 21:00:59

你的安排似乎没问题。代码首先将完成FK技巧本身。将您的List<T>设置为虚拟,以便EF可以使用Lazy Loading

如果您真的想设置,请在DAL上使用Fluent API:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-10-03 20:58:19

您可能希望使用“公共虚拟ICollection”而不是“公共列表”。不过,你写的东西看上去不错。

代码语言:javascript
复制
public virtual ICollection<Guitar> Guitars{ get; set; }

使用“公共虚拟ICollection”的原因是为了获得延迟加载支持。来自一个吉他手,摇滚!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19168978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档