2012-04-19 1 views
2

これは簡単な設定エラーだと私は確信していますが、私の経験の欠如はそれを修正することを禁じています。基本的には、エンティティフレームワークを使用してテーブルにEMPLOYEEを追加したいと思います。Entity FrameworkでSQLサーバーがプライマリキーを生成できないのはなぜですか?

は、ここに私の方法である:

public void createEmployee(CreateEmployeeModel model) 
    { 
     EMPLOYEE emp = new EMPLOYEE() { 
      emp_name = model.Name, 
      emp_email = model.Email, 
      emp_cell_phone = model.CellPhone, 
      emp_adr = model.Address 
     }; 

     _db.AddToEMPLOYEES(emp); 
     _db.SaveChanges(); 
    } 

私は_db.SaveChanges();コールに次のエラーを取得する:ユニークなインデックス「R18_SDE_ROWID_UK」のオブジェクト「dbo.EMPLOYEES」には重複するキー行を挿入できません。重複キー値は(0)です。ここで

はEMPLOYEEエンティティのemp_id列のプロパティである:ここで

StoreGeneratedPattern : Identity 
Concurrency Mode : None 
Default Value : (None) 
Entity Key : True 
Name: emp_id 
Nullable: False 
Type : Int32 

は、SQLサーバー上のEmployeesテーブルのためのemp_id列のプロパティです:

enter image description here

私はわからないんだけどテーブルに従業員が4人いるときに主キーが常に0として生成される理由(0,1,2,3)。

+0

このコードは最初かedmx/DBか?あなたのモデルはどのように見えますか? – BrokenGlass

+0

これはDBの最初のアプローチです。 – ZeroDivide

+0

私は本当に設定問題だと思います。なぜなら、emp_idのプロパティを自動インクリメントに変更しなければならなかったからです。私はそれが間違っている可能性が高いです。 – ZeroDivide

答えて

2

モデルのプロパティを手動で変更する必要がある場合は、データベース自体のID列に設定されていない可能性があります。

データベースをID列に設定した場合は、エンティティを削除してから、再度追加します。

+0

私はこれを行い、私の団体の1人を(0..1)から(0..1)から多くを(0..1)に変更しました。アソシエーションを元に戻して調整しようとしましたが、このエラーがスローされます。エラーエラー113:リレーションシップ 'FK_aspnet_UsersEMPLOYEE'のロール 'EMPLOYEE'で多重度が無効です。依存ロールのプロパティはキープロパティではないので、依存ロールの多重度の上限は*でなければなりません。 – ZeroDivide

+0

@ ZeroDivide - これは、データベースモデルがデータモデルと異なることを意味します。コードモデルを必要なものに変更するだけでは、実際のデータモデルに対応する必要があります。あなたのケースでは、最初にアソシエーションを手動で変更したか(できないこと)、またはモデルが生成されてからデータベースを変更したかのいずれかです。特に、両方の表に同じ主キーがない限り、1:1(または0..1〜0..1)を使用することはできません。また、同じキー値を共有する必要があるため、どちらか一方のみがアイデンティティになります。 –

+0

ええ、私はデータモデルとエンティティモデルの両方をこの関連付け/関係を追加するために戻す必要がありました。何かがデータベースに加えられたすべての変更に台無しにされたように見えます。私はオフィスを離れなければならなかったが、あなたの解決策がそのようだったようだ。 – ZeroDivide

0

EMPLOYEEの新しいインスタンスを正しく設定するには、_db.EMPLOYEES.CreateObject()のような処理が必要な場合があります。

var emp = _db.EMPLOYEES.CreateObject(); 
//set values 

_db.EMPLOYEES.AddObject(emp); 
_db.SaveChanges(); 
+0

これに変更されたコードと私は同じエラーを出しました。 – ZeroDivide

+0

いいえ、そうする必要はありません。特定の状況で変更追跡プロキシを生成したい場合にのみ必要です。 –

関連する問題