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

本文关键字:属性 SQL 映射 字符串 Linq-To DbGenerated 包含 | 更新日期: 2023-09-27 18:29:09

我使用带有属性映射的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需要由定义的字符串设置;不是通过收集其他属性的值生成的。

我可以使用常规getter/setter将Lookup_Id属性更改为一个属性,并添加一个填充Lookup_Id的扩展方法。但是,这将要求我首先将所有对象保存到数据库中,以分配其数据库生成的主键值,然后调用扩展方法来填充Lookup_Id属性,然后再次保存项目。

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

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

为什么不创建一个从现有类派生的新类?将Lookup_Id标记为虚拟并在新类中覆盖它。。。这有助于实现你的目标吗?