2016-04-05 25 views
0

を保存しないで、私は次のプロパティを含むモデルがあります:それが作成された後、私はオブジェクトを調べるとEntity Frameworkのは、データ

public Guid UniqueID 
{ 
    get { return Guid.NewGuid(); } 
} 

を、私は新しいGUIDが正しくUniqueIDフィールドのために作成されていることがわかります。

しかし、db.SaveChanges()を呼び出すと、値が存在してもNULLをこのフィールドに挿入できないことを示すEntity Frameworkからエラーが返されます。

アイデア?

EDIT

private Guid _uniqueID = Guid.NewGuid(); 
public Guid UniqueID 
{ 
    get 
    { 
     if(_uniqueID == null){ 
      _uniqueID = Guid.NewGuid(); 
     } 
     return _uniqueID; 
    } 
    set 
    { 
     _uniqueID = value; 
    } 
} 
+1

あなたは本当に新しいGUIDを取得したいのですか?_いつもあなたはそのプロパティにアクセスしていますか? –

+1

はい、現時点では、データベースに複製されたオブジェクトが現時点で問題を抱えているため、現在は診断と修正を行っていますが、一時的な回避策が必要です。これは、私たちのような一時的な状況でレコードが一意であることを保証する最善の方法です。 – DaRoGa

+2

オブジェクトのIDは変更すべきではありません。各オブジェクトに新しいIDが必要な場合は、新しいGUID値に初期化されるプライベートフィールドを作成します。プロパティにアクセスするたびに新しいIDを取得することは非常に奇妙で、発生している動作を引き起こしている可能性があります。 –

答えて

1

EFは取得専用のプロパティをサポートしていません。フォームをデータベースにロードするときにEFが値を設定できるようにするには、何らかの方法が必要です。フィールドを不変にしたい場合は、プライベートセッターを使用することができます。

private Guid _uniqueID = Guid.NewGuid(); 
public Guid UniqueID 
{ 
    get 
    { 
     return _uniqueID; 
    } 
    private set 
    { 
     _uniqueID = value; 
    } 
} 

これは編集と少し異なります。私はGuidが値型で決してnullになることができないので、セッターをprivateにしてif(_uniqueID == null)を取り出しました。