属性マッピングで Linq-To-SQL を使用しており、次のプロパティを持つクラスがあります。
private long item_Id;
[Column(Storage="item_Id", IsDbGenerated = true, IsPrimaryKey = true)]
public long Item_Id;
private string description;
[Column(Storage="description")]
public string Description
{
get { return description; }
set { description = value; }
}
private string lookup_Id;
[Column(Storage="lookup_Id")]
public string Lookup_Id
{
get { return lookup_Id.ToString() + "|" + Description; }
}
Lookup_Id フィールドには実際にはかなり多くのデータが含まれていますが、この質問の範囲を狭めました。
この設定では、データベースで生成された主キーをオブジェクトの Lookup_Id プロパティの一部として使用できます。
私の問題は、別のソースからこのデータベースにアイテムをインポートする必要があり、それらのアイテムの Lookup_Id を定義済みの文字列で設定する必要があることです。他のプロパティの値を収集することによって生成されません。
Lookup_Id プロパティを通常の getter/setter を持つプロパティに変更し、Lookup_Id を設定する拡張メソッドを追加できます。ただし、これには、最初にすべてのオブジェクトをデータベースに保存して、データベースで生成された主キー値を割り当ててから、拡張メソッドを呼び出して Lookup_Id プロパティを設定し、アイテムを再度保存する必要があります。
オブジェクトを 2 回保存せずにこれを達成できる方法はありますか? システムが作成するアイテムの主キー値が入力された Lookup_Id を生成できる必要がありますが、たとえば CSV ファイルからインポートする値を Lookup_Id に割り当てることもできる必要があります。