現在、カスタムDAOフレームワークを使用しているプロジェクトをEntity Frameworkを使用して変換しようとしています。システムがかなり大きいので、データベース(SQL Azure DBはそれ自体が重要です)自体は特に実現可能ではないため、可能ならば避けるべきです。C#:エンティティフレームワークの検索データ型の変更
問題はID列にあります。残念ながら、システムが作成されたときには、bigint
データ型のテーブルと、int
のテーブルがありますが、モデル自体は基本クラスのもので、IDはlong
です。これまでのフレームワークはこのような状況に対応できましたが、私はエンティティフレームワークでそれを行う方法を見つけることができませんでした。以下は
は、私は考えることができる最も簡単な例である:
public class Context : DbContext {
public IDbSet<Foo> Foos {get;set;}
public IDbSet<Bar> Bars {get;set;}
}
public abstract class BaseClass {
public long ID;
}
public class Foo : BaseClass {
...
}
public class Bar : BaseClass {
...
}
SQL Table: Foo
+-------------+
| id : bigint |
| ... |
+-------------+
SQL Table : Bar
+-------------+
| id : int |
| ... |
+-------------+
私はBar
モデルをロードしようとすると、私はこのエラーを取得:
The 'ID' property on 'BaseClass' could not be set to a 'Int32' value. You must set this property to a non-null value of type 'Int64'.
私が見つけるしたいのですがBarにintがあることをシステムに伝える方法、Fooは憧れている。私は文脈でOnModelCreating
を無効にして、Bar
のためにHasColumnType
を定義しようとしました。
Schema specified is not valid. Errors:
(105,12) : error 2019: Member Mapping specified is not valid. The type 'Edm.Int64[Nullable=False,DefaultValue=]' of member 'ID' in type 'Bar' is not compatible with 'SqlServer.int[Nullable=False,DefaultValue=,StoreGeneratedPattern=Identity]' of member 'ID' in type 'CodeFirstDatabaseSchema.Bar'.
私が唯一のサーバーにリクエストを送信する前int
にBaseClass
のID
の予想データ型を変更することができれば、その後、私は最高のことができるようにすべきであるように私には思える:それは私に新しいエラーを与えました応答を受け取った後、long
に変換してください。理想的には、私はこれをクラス単位で行いたいと思っています。
誰でも正しい方向に向けることができますか?
ええ、それは私が恐れていたものです。私は別の間違ったものを間違って解決しようとしていることを認識しています。私はちょっとしたトリックで大きな変化を避けることができると思っていました。私が試したことのすべてがうまくいかなかったので、私はあなたが推薦したものを正確にやることに自分自身を辞めたと思う。 より良いソリューションがない場合は、これを正しいとマークします。 – Merwer
@Merwer時々、真実が痛い、魔法使いを撃たないでください=) – casperOne
こんにちは@casperOne同じトピックに沿っているので、私の質問にバージンして申し訳ありません。その反対をする方法はありますか?私はInt型のIDを持つテーブルを持っています。危険なほど大きくなっていて、それをロングに変更する方法があるのだろうか? (エンティティフレームワークCF 6。1) – hjavaher