Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 包含DbGenerated主键的Linq到SQL属性映射字符串属性_C#_Linq To Sql - Fatal编程技术网

C# 包含DbGenerated主键的Linq到SQL属性映射字符串属性

C# 包含DbGenerated主键的Linq到SQL属性映射字符串属性,c#,linq-to-sql,C#,Linq To Sql,我正在使用具有属性映射的Linq到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 {

我正在使用具有属性映射的Linq到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属性的一部分

我的问题是,我需要从不同的源将项目导入此数据库,并且这些项目的查找Id需要由定义的字符串设置;不是通过收集其他属性的值生成的

我可以将我的Lookup\u Id属性更改为具有常规getter/setter的属性,并添加填充Lookup\u Id的扩展方法。但是,这需要我先将所有对象保存到数据库中,以获得其数据库生成的主键值,然后调用扩展方法填充Lookup\u Id属性,然后再次保存项目


有没有什么方法可以在不需要保存两次对象的情况下实现这一点?我需要能够使用系统创建的项目填充的主键值生成查找Id,但我还需要能够使用可能从CSV文件导入的值分配查找Id。

为什么不创建从现有类派生的新类?将查找Id标记为虚拟,并在新类中重写它。。。这有助于实现你的目标吗?

我想这会奏效,所以我接受这个有效的答案。然而,我的解决方案只是添加另一个属性,该属性将容纳导入项目的ID。我的Lookup\u Id属性只是从对象的其他属性构建的字符串,因此我将该属性设置为只读,并在Lookup\u Id getter中检查导入的Id字段。如果为空,则使用对象的主键值;否则,我将使用导入的ID字段中的值。