Entity Framework 4.1 を使用しています。外部キーのない単純なテーブルがオブジェクト (TransmissionHistory テーブルとオブジェクト) にマップされます。しかし、保存すると、フィールドの 1 つが NULL になります。ログに。(フィールド名は WhoDidIt です。)
さらに調査した結果、オブジェクトの自動プロパティを Get と Set およびプライベート バッキング プロパティに置き換えました。データベースの保存が実行されると、他のプロパティの「取得」が実行されますが、私の問題である WhoDidIt プロパティは実行されません。
クラス定義の一部を次に示します。
public partial class TransmissionHistory
{
private string _id;
private string _transmissonTable;
private string _whoDidIt;
public string Id
{
get { return _id; }
set { _id = value; }
}
public string TransmissionTable
{
get { return _transmissonTable; }
set { _transmissonTable = value; }
}
public string WhoDidIt
{
get { return _whoDidIt; }
set { _whoDidIt = value; }
}
オブジェクトを作成して保存するコードを次に示します。
TransmissionHistory trxHist = new TransmissionHistory();
trxHist.Id = guid.ToString();
trxHist.TransmissionTable = "MyTransmission";
trxHist.WhoDidIt = "Me";
_db.TransmissionHistories.Add(trxHist);
_db.SaveChanges();
ブレークポイントを設定すると、データベースの SaveChanges が他の 2 つのプロパティの Get メソッドをヒットしていることは明らかですが、WhoDidIt はヒットしていません。そのため、trxHist オブジェクトが WhoDidIt に値を持っていても、データベースには常に NULL として保存されます。これは「データベース ファースト」としてビルドされ、Visual Studio によってオブジェクトがビルドされました。また、テーブルを削除して再構築し、コードを再生成して、フィールド名を変更しようとしました。ここで何が起きてるの?