sql >> データベース >  >> RDS >> Mysql

.NET EF4.1+MySQLによるクラス継承

    今日も同じ問題に直面しました。違いは、テーブルの作成にCode Firstに依存しておらず、手動で作成していることです。

    ここ テーブルに「Discriminator」フィールドを手動で作成し、そのタイプをMEDIUMTEXTに変更しましたが、プロバイダーは、MEDIUMTEXTにVARCHARのようなMaxLengthがない場合でも、何らかの方法でMaxLengthプロパティを提供していると主張しました。 、これはプロバイダーのバグであるに違いないと思います。

    これを回避するために、流暢なAPIを使用して、ディスクリミネーター列名(「ディスクリミネーター」として保持)とEFがディスクリミネーター列に期待する値を手動で通知しました。この場合は次のようになります。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Vehicle>()
                .Map<Car>(m => m.Requires("Discriminator").HasValue("Car"))
                .Map<Bike>(m => m.Requires("Discriminator").HasValue("Bike"));
    }
    

    識別列のタイプをVARCHAR(50)に変更しましたが、明らかな問題はありません。現在は正常に機能しています。私にとっての代替案は、手間がかかりすぎる別のORMに移行することです。次のバージョンのMySqlプロバイダーを待って、修正されているかどうかをテストします。その間、このソリューションに固執します。

    >


    1. mysqlの他のテーブルの一致する値に基づいて列を更新します

    2. ロック待機タイムアウトの修正が超過しました。 'スタックしたMysqlテーブルのトランザクションを再開してみますか?

    3. 世論機関のデータモデル

    4. SELECT句とWHERE句でのストアド関数呼び出しの最適化