0

エンティティ フレームワーク コード ファースト:

テーブル リレーションシップを作成したいとします。コードを配置するのに適した場所はどこですか?

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<table1>().HasMany(i => i.AllowedDestinations).WithMany(d => d.something)
      ......

または、OnModelCreating 以外の場所ですか?

4

1 に答える 1

1

「MYEntityConfiguration」(MyEntity は構成しようとしているエンティティのタイプ) というクラスを作成し、Entity Framework にある EntityTypeConfiguration<> タイプから継承できます。

例えば....

public class Position
    {
        public int Id { get; set; }

        public string CompanyName { get; set; }

        public bool IsCurrentRole { get; set; }

        public string Summary { get; set; }

        public string Title { get; set; }

        public int? StartMonth { get; set; }

        public int? StartYear { get; set; }

        public int? EndMonth { get; set; }

        public int? EndYear { get; set; }

        public virtual User User { get; set; }
        public int UserId { get; set; }
    }

および対応する構成ファイル....

public class PositionConfiguration : EntityTypeConfiguration<Position>
{
    public PositionConfiguration()
    {
        this.ToTable("Positions");
        this.HasKey(p => p.Id);
        this.Property(p => p.Id).HasColumnName("PositionId").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        this.Property(p => p.CompanyName).HasColumnName("CompanyName");
        this.Property(p => p.EndMonth).IsOptional().HasColumnName("EndMonth");
        this.Property(p => p.EndYear).IsOptional().HasColumnName("EndYear");
        this.Property(p => p.IsCurrentRole).IsOptional().HasColumnName("IsCurrentRole");
        this.Property(p => p.StartMonth).IsOptional().HasColumnName("StartMonth");
        this.Property(p => p.StartYear).IsOptional().HasColumnName("StartYear");

        this.Property(p => p.Summary).HasColumnName("Summary");
        this.Property(p => p.Title).HasColumnName("Title");
    }
}

次に、DBContext で... OnModelCreating...

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new PositionConfiguration());

            base.OnModelCreating(modelBuilder);
        }

これにより、構成が適切に保持されます...これが最良の方法であることがわかりました。

于 2012-12-04T13:36:01.943 に答える