3

生成されたモデルは次のとおりです。

public class DbObjectMap : EntityTypeConfiguration<DbObject>
{
    public DbObjectMap()
    {
        // Primary Key
        HasKey(t => new { t.Type, CompanyName = t.CompanyName, Id = t.Id });

        // Properties
        Property(t => t.Timestamp)
            .IsRequired()
            .IsFixedLength()
            .HasMaxLength(8)
            .IsRowVersion();

        Property(t => t.Type)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

        Property(t => t.CompanyName)
            .IsRequired()
            .HasMaxLength(30);

        this.Property(t => t.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

        this.Property(t => t.Name)
            .IsRequired()
            .HasMaxLength(30);

        this.Property(t => t.VersionList)
            .IsRequired()
            .HasMaxLength(80);

        this.Property(t => t.LockedBy)
            .IsRequired()
            .HasMaxLength(132);

        // Table & Column Mappings
        this.ToTable("Object");
        this.Property(t => t.Timestamp).HasColumnName("timestamp");
        this.Property(t => t.Type).HasColumnName("Type");
        this.Property(t => t.CompanyName).HasColumnName("Company Name");
        this.Property(t => t.Id).HasColumnName("ID");
        this.Property(t => t.Name).HasColumnName("Name");
        this.Property(t => t.Modified).HasColumnName("Modified");
        this.Property(t => t.Compiled).HasColumnName("Compiled");
        this.Property(t => t.BlobReference).HasColumnName("BLOB Reference");
        this.Property(t => t.BlobSize).HasColumnName("BLOB Size");
        this.Property(t => t.DbmTableNo).HasColumnName("DBM Table No_");
        this.Property(t => t.Date).HasColumnName("Date");
        this.Property(t => t.Time).HasColumnName("Time");
        this.Property(t => t.VersionList).HasColumnName("Version List");
        this.Property(t => t.Locked).HasColumnName("Locked");
        this.Property(t => t.LockedBy).HasColumnName("Locked By");
    }
}

と:

{
    public ObjectTrackingMap()
    {
        // Primary Key
        HasKey(t => new { ObjectType = t.ObjectType, Id = t.Id, ChangeType = t.ChangeType });

        // Properties
        Property(t => t.Timestamp)
            .IsRequired()
            .IsFixedLength()
            .HasMaxLength(8)
            .IsRowVersion();

        Property(t => t.ObjectType)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

        Property(t => t.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

        Property(t => t.ChangeType)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);



        // Table & Column Mappings
        ToTable("Object Tracking");
        Property(t => t.Timestamp).HasColumnName("timestamp");
        Property(t => t.ObjectType).HasColumnName("Object Type");
        Property(t => t.Id).HasColumnName("Object ID");
        Property(t => t.ChangeType).HasColumnName("Change Type");
        Property(t => t.ObjectTimestamp).HasColumnName("Object Timestamp");
    }
}

これら 2 つのオブジェクトは、データベース テーブル内で何の関係もありません。Object.Type = ObjectTracking.ObjectTypeしかし、それらはandObject.ID = ObjectTracking.ObjectIDフィールドで結合でき ます。

これら 2 つのエンティティに対して FluentAPI を使用して EF で正しいマッピングを作成する方法はありますか?

4

2 に答える 2

0

私が理解していることから、Fluent APIの設定はデータベース自体に反映することを意図しています。したがって、文字列の最小長の設定がありません (注釈属性で実行できます)。したがって、データベースに反映されない fluent API を介した設定の要求には、致命的な矛盾が含まれているようです。

探しているものを達成するために、おそらくこれらのテーブルにアクセスするリポジトリ層、ビジネスロジック、または使用しているデータアクセス層の上にある他の層で、自分で「リンク」を行うことをお勧めします。

それが役に立てば幸い :)

于 2012-09-07T05:50:53.027 に答える
0

最も簡単な方法は、Visual Studio を使用することです。グラフィック デザイナー モードで EDMX ファイルを開き (ダブルクリック)、ツールボックスとプロパティ ウィンドウをアクティブにし (上部の [表示] メニューで)、ツールボックスから [関連付け] を選択し、1 つのテーブルから関係をドラッグして描画します。プロパティウィンドウで微調整するよりも、別のものにします。

于 2012-09-06T11:16:31.857 に答える