我正在使用一个我无法以任何方式改变的数据库。
其中有一个包含多种数据类型的表,由typeId。
定义例如表格。
+------+----------+------+------------+-------------+
| ID | TypeId | Nr | Descr | Value |
+------+----------+------+------------+-------------+
| 1 | 1 | 1 | Category | Customer |
| 2 | 2 | 1 | Language | English |
| 3 | 2 | 2 | Language | Spanish |
| 4 | 1 | 2 | Category | Supplier |
+------+----------+------+------------+-------------+
我想将此表映射到两个不同的linq-to-sql模型。
目前我将它映射到一个如下
[Table(Name = "StupidTable")]
public class AllTypesModel : IModel
{
[Column(Name = "ID", IsPrimaryKey = true)]
public int? Id { get; set; }
[Column(Name = "TypeId", CanBeNull = false)]
public int TypeId { get; set; }
[Column(Name = "Nr", CanBeNull = false)]
public int Nr { get; set; }
[Column(Name = "Descr", CanBeNull = true)]
public string Description { get; set; }
[Column(Name = "Value", CanBeNull = true)]
public string Value{ get; set; }
}
有没有办法根据映射中的列进行预选?
我想这样做的原因是基于此表用于其他模型中的关联,其中Nr是外键,而nr不是唯一的。
编辑:
问题是当我想使用StupidTable中的类型建立关联时。现在我必须像这样解决它:
private EntitySet<AllTypesModel> _categories;
[Association(Storage = "_categories", ThisKey = "CategoryId", OtherKey = "Nr")]
public EntitySet<AllTypesModel> Categories
{
get { return _categories; }
set { _groups._categories(value); }
}
这将在启动时获得Category和Languge,因此我必须添加另一个函数:
public AllTypesModel JustACategory
{
get
{
return _categories.FirstOrDefault(c => c.TypeId == 1);
}
}
只过滤掉类别。鉴于这张表有很多不同的类型,这是一个比我更喜欢的操作。