3

Entity Framework 6、Code First Fluent API を使用して、規則から逸脱するいくつかの問題に遭遇しています。

典型的な例は、私が Software というエンティティーを持っていることです。db テーブルの名前を Softwares にしたくありません。それはソフトウェアと呼ばれるべきです。しかし、他にもいくつかの出発があります。

問題は、1 つだけであるべき外部キーに対して 2 つの列が作成されていることです。たとえば、私のドメインでは、SoftwareFiles と Software の間に 1:m の関係があります。(ロジックは、ソフトウェアの一部に関連する複数のファイルが存在する可能性があるということです。たとえば、Windows XP では、サービス パックのために、複数の ISO が関連付けられています)。

ファイル:

public class Software
{
    public string Description { get; set; }
    public int Id { get; set; }
    public SoftwareType Type { get; set; }
    public int TypeId { get; set; }

    public virtual ICollection<SoftwareFile> SoftwareFiles { get; set; }
}

public class SoftwareFile
{
    public int Id { get; set; }
    public string FileName { get; set; }
    public FileTypes FileType { get; set; }
    public string Name { get; set; }
    public Software Software { get; set; }
    public int SoftwareId { get; set; }
}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //  Set up the SoftwareFile table
        modelBuilder.Entity<SoftwareFile>().Property(s => s.FileName).HasMaxLength(250).IsRequired().IsVariableLength();
        modelBuilder.Entity<SoftwareFile>().Property(s => s.FileType).IsRequired();
        modelBuilder.Entity<SoftwareFile>().HasRequired(s => s.Software).WithMany().HasForeignKey(s => s.SoftwareId);

        modelBuilder.Entity<Software>().ToTable("Software");
        modelBuilder.Entity<Software>().Property(s => s.Description).HasMaxLength(250).IsOptional().IsVariableLength();
        modelBuilder.Entity<Software>().HasRequired(s => s.Type).WithMany().HasForeignKey(t => t.TypeId);


        base.OnModelCreating(modelBuilder);
    }

これにより、sdf データベースにSoftwareId列とSoftware_Id列の両方が作成されます。

このように慣習から逸脱する方法を知っている人はいますか?

乾杯

4

1 に答える 1

1

二重外部キーは、テーブルの名前変更とは関係ありません。

を取り外します

 modelBuilder.Entity<SoftwareFile>().HasRequired(s => s.Software).WithMany().HasForeignKey(s => s.SoftwareId);

ライン。

このコード行は、と の間に一方的な1 対多の関係がSoftwareあり、プロパティを外部キーとしてSoftwareFile使用する必要があることを示しています。SoftwareId

ただし、プロパティ onがあるため、EF は、明示的な外部キーを提供しないことを選択した 2 つのエンティティ間の 1 対多の関係を 2 番目に定義する必要があると想定ますSoftwareFilesSoftware

したがって、EF はSoftware_Id!という名前の 2 番目の外部キー プロパティを作成することで助けになります。

于 2013-11-10T08:55:21.580 に答える