2

我使用 Mvc (Country -> State -> City) 并想使用 Fluent Api 建立外键关系,那么这里是模型。

public class Country
{
    public int Country_Id { get; set; }
    public String Country_Name { get; set; }
}
public class State
{
    public string State_Name { get; set; }
    public int State_Id { get; set; }
    public virtual Country Country { get; set; }
}
public class City
{
    public string City_Name { get; set; }
    public int City_Id { get; set; }
    public virtual State State { get; set; }
}

现在我制作 UserContext 类来定义 DbContext 和 Fluent api 任何人都可以知道如何在这些实体之间建立关系

public class UsersContext : DbContext
{
    public UsersContext()
        : base("DefaultConnection") {}

    public DbSet<UserProfile> UserProfiles { get; set; }
    public DbSet<Country> TbCountries { get; set; }
    public DbSet<State> TbState { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //Country
        modelBuilder.Entity<Country>().HasKey(c => c.Country_Id);
        modelBuilder.Entity<Country>().Property(p => p.Country_Name).HasColumnType("VARCHAR").IsRequired().HasMaxLength(50);
        //State
    } 
4

1 回答 1

0

您可以为每个实体类创建一个配置类:

internal partial class CountryConfiguration : EntityTypeConfiguration<Country>
    {
        public CountryConfiguration()
        {
            ToTable("dbo.Country");
            HasKey(x => x.Country_Id);

            Property(x => x.Country_Id).HasColumnName("Country_Id").IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            Property(x => x.Country_Name).HasColumnName("Country_Name").IsOptional().HasMaxLength(255);
        }
}


internal partial class StateConfiguration : EntityTypeConfiguration<State>
{
        public StateConfiguration()
        {
            ToTable("dbo.State");
            HasKey(x => x.State_Id);

            Property(x => x.State_Id).HasColumnName("State_Id").IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            Property(x => x.State_Name).HasColumnName("State_Name").IsOptional().HasMaxLength(255);
            // Foreign keys
            HasOptional(a => a.Country).WithMany(b => b.States).HasForeignKey(c => c.CountryId); 
        }
}

然后在您的 OnModelCreating 方法中,您可以像这样连接它们:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new CountryConfiguration());
        modelBuilder.Configurations.Add(new StateConfiguration());
    } 

如果您已经有一个现有的数据库,那么有一个非常方便的工具可以从数据库中生成代码优先的 POCO 类。

于 2014-09-26T08:37:59.090 回答