Entity FrameworkからSQL Serverにデータを保存しようとしています。これは正常に動作し、私はここで間違って何が起こっているのかは分かりません。Entity Frameworkがデータを保存しません。
try
{
tblPortalCustomerInfo _custInfo = new tblPortalCustomerInfo();
_custInfo = _da.GetCustById(new Guid("397E4A4B-CD89-43DC-9E70-C19FC27EE6E4"));
_custInfo.addressLine1 = tbaddress1.Text;
_custInfo.addressLine2 = tbaddress2.Text;
_custInfo.town = tbtown.Text;
_custInfo.county = "test";
_custInfo.postcode = tbpostCode.Text;
_custInfo.email = tbEmail.Text;
_custInfo.phone = tbDayPhone.Text;
if(_custInfo.EntityState == System.Data.EntityState.Detached)
{
_da.portalEntities.tblPortalCustomerInfoes.AddObject(_custInfo);
}
_da.SaveChanges();
}
catch (Exception ex)
{
throw;
}
私はコードをステップを持っているとエラーが生成されていないと、それはここでOKを取り付けたばかりされて、私のGetCustById
機能
// <returns></returns>
public tblPortalCustomerInfo GetCustById(Guid id)
{
try
{
tblPortalCustomerInfo _customerInfo;
_customerInfo = (from _custInfo in _dal.portalEntities.tblPortalCustomerInfoes
where _custInfo.id == id
select _custInfo).FirstOrDefault();
//If the empNotes entity is null create a new one and attach it to the context.
if (_customerInfo == null)
{
_customerInfo = new tblPortalCustomerInfo();
_dal.portalEntities.tblPortalCustomerInfoes.AddObject(_customerInfo);
}
return _customerInfo;
}
catch (Exception ex)
{
string inner = string.Empty;
if (ex.InnerException != null)
{
inner = ex.InnerException.ToString();
}
return null;
}
}
マイポータルの実体はちょうど私のコンテキストベースオフ
public portalEntities1 _portalEntities;
public portalEntities1 portalEntities
{
get
{
if (_portalEntities == null)
{
try
{
_portalEntities = new portalEntities1();
}
catch (Exception ex)
{
}
}
return _portalEntities;
}
}
です
あなたが言う前に私はポストバックチェックをしていますはい私のページの負荷でここにいます
protected void Page_Load(object sender, EventArgs e)
{
/****** Script for SelectTopNRows command from SSMS ******/
/****** Script for SelectTopNRows command from SSMS ******/
tblPortalCustomerInfo _myCustomerInfo = _da.GetCustById(new Guid("397E4A4B-CD89-43DC-9E70-C19FC27EE6E4"));
if (!IsPostBack)
{
tbaddress1.Text = _myCustomerInfo.addressLine1;
tbaddress2.Text = _myCustomerInfo.addressLine2;
tbtown.Text = _myCustomerInfo.town;
tbpostCode.Text = _myCustomerInfo.postcode;
tbMobile.Text = _myCustomerInfo.mobile;
tbEmail.Text = _myCustomerInfo.email;
tbLandLine.Text = _myCustomerInfo.phone;
}
}
私のコンテキストベース
public portalEntities1 _portalEntities;
public portalEntities1 portalEntities
{
get
{
if (_portalEntities == null)
{
try
{
_portalEntities = new portalEntities1();
}
catch (Exception ex)
{
}
}
return _portalEntities;
}
}
であるマイポータルのエンティティのプロパティは、私は情報がちょうどデシベル何らかの理由で誰もが任意のアイデアを持って
注1
に保存されていないエラーを取得していません私はef5を使用していますので、これは論理的に見えるオブジェクトの状態を変更する正しい方法です
protected void btnSave_Click(object sender, EventArgs e)
{
try
{
tblPortalCustomerInfo _custInfo = new tblPortalCustomerInfo();
_custInfo = _da.GetCustById(new Guid("397E4A4B-CD89-43DC-9E70-C19FC27EE6E4"));
_custInfo.addressLine1 = tbaddress1.Text;
_custInfo.addressLine2 = tbaddress2.Text;
_custInfo.town = tbtown.Text;
_custInfo.county = "test";
_custInfo.postcode = tbpostCode.Text;
_custInfo.email = tbEmail.Text;
_custInfo.phone = tbDayPhone.Text;
_da.portalEntities.ObjectStateManager.ChangeObjectState(_custInfo, System.Data.EntityState.Modified); ----> is this correct for ef5
_da.SaveChanges();
}
}
私は上記の方法をしようとすると、私が投げ
例外を提示しています:System.Data.Entity.dll追加情報の「System.InvalidOperationExceptionが」:ObjectStateManagerはを参照してObjectStateEntryが含まれていませんタイプ「portalef.tblPortalCustomerInfo」のオブジェクトです。あなたが特定のIDを持つ顧客を検索し、顧客が存在しない場合は、あなたがそれを作成し、呼び出しcode.Eitherの道に戻す
GetCustById
と呼ばれる関数の内部
問題を再現している最小限のコードで質問を提供するとよいでしょう。また空の 'try'-' catch 'ブロックは良い方法ではありません。ここでできることは、Debug-Exceptionsに行き、** CLR Exceptions **のチェックボックスをオンにします。その後、スローされた例外はすべてデバッグモードで表示されます。また、ステップバイステップのログを実装して、どこでクラッシュするかを確認することもできます。なぜそのコードがエンティティを現在保存していないのかを側面の観点から言うのは難しいです。 –
@IvanYurchenkoこんにちは申し訳ありませんが、そのオプションは – rogue39nin
です。「Ctrl + D、E」を押し、** CLR Exceptions **の下に「投げられた」と「未処理の」オプションの両方をチェックします。これはスローされたが、 'catch'ブロック例外によって処理されることを決定するのに役立ちます。 –