私はクラスが3つあります:
BasePlace, Hall, HallPlan
です。オブジェクトを更新するLinqToSql
関係:
BasePlace - Hall
:1対多。
Hall
- HallPlan
:1対多。
私はリモートプログラムから場所(会場)を取得します。オブジェクトを追加(または更新)する次の方法があります。
public void AddPremieraPlace(IEnumerable<BasePlace> places)
{
if(places != null)
{
foreach (var place in places)
{
//is exist in db
var dbPlace = Database.BasePlaces.FirstOrDefault(p => p.OIDPremiera == place.OIDPremiera);
// if exist update properties and collections
if (dbPlace != null)
{
dbPlace.Name = place.Name
dbPlace.Halls = place.Halls;
}
else
Add(place); // just add new place
Database.SubmitChanges();
}
}
}
DBに場所が存在すると、更新が正しく動作しません。 Hall
とHallPlan
で重複作成されます。 Hall
テーブル、例えば:
OID Name PlaceId OIDPremiera
19 Redisson NULL 1
20 Test 2 NULL 3
21 Test 3 NULL 2
22 Redisson 5 1
23 Test 2 5 3
24 Test 3 5 2
正しく更新する方法は?おかげさまで
Add()
:
public virtual void Add(TClass entity)
{
Check.Argument.IsNotNull(entity, "entity");
Database.GetTable<TClass>().InsertOnSubmit(entity);
}
'PlaceId'カラムは' BasePlace'テーブルの外部キーですか?重複する行は '22'と' 24'の間の 'OID'を持つ行ですか? –
あなたのadd()は何をしますか? – Pleun
@EnricoCampidoglio:はい、それはFKです。はい、22-24の間で複製してください。 – user348173