【问题标题】:Mvc, Foreign-Key RelationshipMvc,外键关系
【发布时间】:2014-09-26 07:44:00
【问题描述】:

我使用 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
    } 

【问题讨论】:

标签: c# asp.net-mvc ef-fluent-api


【解决方案1】:

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

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());
    } 

如果你已经有一个现有的数据库,有一个very handy tool 可以从数据库中生成代码优先的 POCO 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多