使用linq将具有多种类型的表映射到sql

时间:2015-05-11 12:37:51

标签: c# sql-server linq linq-to-sql

我正在使用一个我无法以任何方式改变的数据库。

其中有一个包含多种数据类型的表,由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);
    }
}

只过滤掉类别。鉴于这张表有很多不同的类型,这是一个比我更喜欢的操作。

0 个答案:

没有答案