Linq-To-SQL属性映射包含DbGenerated主键的字符串属性

时间:2013-08-26 21:38:25

标签: c# linq-to-sql

我正在使用带有属性映射的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属性,然后再次保存项目。

我是否有某种方法可以在不需要保存对象两次的情况下完成此操作?我需要能够为我的系统创建的项目填充主键值来生成Lookup_Id,但我还需要能够为Lookup_Id分配我可能从CSV文件导入的值。例如。

1 个答案:

答案 0 :(得分:1)

为什么不创建一个派生自现有类的新类?将您的Lookup_Id标记为虚拟并在新类中覆盖它...它是否有助于实现您的目标?