0

最近、既存の製品を Entity Framework Code First Migrations を使用するように切り替えました。移行はかなり苦痛でしたが、この時点でほぼすべてを乗り越えました。ローカル環境で動作するようになったので、展開環境にプッシュしました。残念ながら、私たちの展開環境は、新しい EF 移行で何かをサポートしていないようです。

私たちの環境は、Web (.Net MVC3) サーバーとソケット サーバーの 2 つのサーバーで構成されており、どちらも Windows Azure で実行されています。問題はソケット サーバーでのみ発生しているように見えます。実際、Entity Framework はデータベース ハッシュが一致しないことを通知しています (を使用context.Database.CompatibleWithModel())。

DB モデルがコード モデルと一致しないことを EF が通知しているという事実を無視すると、遭遇する唯一のエラーは、複合キーを持つエンティティ オブジェクトの挿入です。他のすべてのエンティティは問題なく作成できます。すべてのエンティティ クラスは、基本クラスから派生します。

class BaseEntity {
    [HiddenInput(DisplayValue = false)]
    [Key, Column(Order = 0)]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual long Id { get; set; }
}

EF が複合キーをサポートするには、「Order」ピースを追加する必要がありました。問題のあるモデルは次のようになります。

class SubEntity {
    [MaxLength(255)]
    [Required]
    [Key, Column(Order = 1)]
    public string Name { get; set; }
}

コンテキストに新しいオブジェクトを追加して変更を保存しようとすると、明示的に を設定できず、 を使用SubEntityできないというエラーが SQL から返されます。IdIDENTITY_INSERT ON

コードは、ローカル マシンと Web サーバーで正常に動作します。DB モデルは互換性があり、「SubEntity」オブジェクトを問題なく作成できます。

私には、ソケット サーバー環境の EF は[DatabaseGenerated]、複合キーを使用するときに注釈を無視しているように見えます。これにより、エラーが説明され、DB モデルに互換性がない理由が説明されます。これは理にかなっていますか?環境に EF の動作を変えるものはありますか?

4

1 に答える 1

1

{机、壁、同僚の拳}に頭をぶつけた4日間の後、私は最終的に問題の解決策を見つけました(理解していませんが)。

繰り返しますが、これは Windows Azure 環境でサーバーを実行した場合にのみ発生し (ローカル環境では発生しません)、ソケット サーバー (ExitGames による Photon) で実行した場合にのみ発生するようです。

何らかの理由で、[HiddenInput(DisplayValue = false)]MVC アノテーションであるアノテーション (したがって、Photon サーバーに影響を与えるべきではない) により、EntityFrameworkIdはクラスのプロパティが存在しないと判断しますSubEntity

属性を削除HiddenInputすると、問題が修正されます。そのため、「修正」されていますが、その理由はまだわかりません。

于 2012-10-19T20:03:56.477 に答える