私は問題があり、他の解決策を探して解決できませんでした。問題は、ユーザーからアプリケーションを入手することです。アプリケーションは異なる状態になることがあります。アプリケーション自体をAPPLICATIONテーブルに保持し、アプリケーションの状態をAPPLICATIONSTATEテーブルに保持します。ユーザーがアプリケーションを提出すると、デフォルトのアプリケーション状態値がアプリケーション状態テーブルに書き込まれます。時間の間、アプリケーションの状態は変更され、各変更はAPPLICATIONSTATEテーブルに書き込まれます。プロパティ 'APPLICATIONID'はオブジェクトのキー情報の一部であり、変更することはできません
私はEntity Frameworkのデータベース最初のアプローチ、(OracleのEF)を使用し、ここに私のデータベースのER図である午前:
public partial class APPLICATION
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public APPLICATION()
{
this.APPLICATIONSTATE = new HashSet<APPLICATIONSTATE>();
}
public int APPLICATIONID { get; set; }
public System.DateTime APPLICATIONDATE { get; set; }
public short PROVINCEID { get; set; }
public Nullable<short> ILCEID { get; set; }
public decimal AREA { get; set; }
public bool ISBASEMENTOK { get; set; }
public string APPLICATIONEXPLAINATION { get; set; }
public virtual PERSONEL LOJ_PERSONEL { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<APPLICATIONSTATE> LOJ_APPLICATIONSTATE{ get; set; }
}
public partial class APPLICATIONSTATE
{
public long APPLICATIONSTATEID { get; set; }
public int APPLICATIONENUM { get; set; }
public System.DateTime CURRENTTIME { get; set; }
public virtual APPLICATION LOJ_APPLICATION { get; set; }
public virtual USER LOJ_USER { get; set; }
}
:ここ
は、Entity Frameworkで生成された部分クラスであります
私はリポジトリパターンを使用しています。新しいアプリケーションとアプリケーションの状態を追加しようとするコードセクションは次のとおりです。
int applicationId = int.minvalue;
USER myuser = null;
APPLICATION myApplication = this.gettingFromSomewhere();
using (HousingEntities model = new HousingEntities())
{
applicantuser = model.LOJ_PERSONEL.FirstOrDefault(p => p.PERSONELID == YeniBasvuru.PersonelId);
myApplication.LOJ_USER = applicantuser;
model.APPLICATION.Add(myApplication);
//saving the application
model.SaveChanges();
//getting the primary key of newly created application object from database.
applicationId = this.getMostCurrentIdOfApplication();
myApplication.APPLICATIONID = applicationId;
//getting the user that submits application
applicant = model.USER.FirstOrDefault(p => p.LOJ_USER.USERID == myApplication.LOJ_PERSONEL.USERID);
//if clause-1
if(applicant != null)
{
//saving the state of the application.
appState = new APPLICATIONSTATE();
//3 is the default state for application. When we need to change it to 4, newly row will be added.
appState.APPLICATIONSTATEID = 3;
appState.LOJ_APPLICATION = myApplication;
appState.LOJ_USER = applicant;
//I am getting an error here.
model.APPLICATIONSTATE.Add(appState);
model.SaveChanges();
}
}
result.TransactionResult = true;
result.rowId = applicationId;
}
//other catches removed for clarity.
catch (Exception ex)
{
islemSonuc = new FunctionResult (ex, this._olasihataciddiyeti);
this.writeError(ex);
}
上記の行にエラーが表示されますプロパティ 'APPLICATIONID'はオブジェクトのキー情報の一部であり、変更できません。エラー。このエラーを克服するにはどうすればよいですか?前もって感謝します。
どうすればこのエラーを解決できますか?前もって感謝します。
問題は 'myApplication.APPLICATIONID = applicationId;'です。 'myApplication.APPLICATIONID'はデータベースによって自動生成され、その呼び出しは必要ありません。** ** model.APPLICATION.Add(myApplication);の前にこれを行う必要があります。 –
Ivan、これはポイントではありません。 applicationIdはデータベースから取得されており、if節を削除するとコードはエラーなく実行されます。 – tahasozgen
どのif節?内部にSaveChangesを持つもの? –