Немного опоздал на вечеринку, но есть еще один способ сделать это, можно создать отдельный класс таблицы LINQ для каждого варианта «тип», который вы храните в таблице базы данных. Это позволяет выполнять операции вставки. например;
[Table(Name = "tVariant")]
public class tVariantDouble
{
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int variantID { get; set; }
[Column(CanBeNull = true)]
public double? myVariant { get; set; }
[Column(CanBeNull = true)]
public string name { get; set; }
[Column(CanBeNull = false)]
public int typeID { get; set; }
public tVariantDouble() { typeID = 1; }
};
[Table(Name = "tVariant")]
public class tVariantInteger
{
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public int variantID { get; set; }
[Column(CanBeNull = true)]
public int? myVariant { get; set; }
[Column(CanBeNull = true)]
public string name { get; set; }
[Column(CanBeNull = false)]
public int typeID { get; set; }
public tVariantInteger() { typeID = 2; }
};
Эти классы затем позволяют вставлять традиционный метод LINQ-to-SQL. Я также устанавливаю типID во время вставки уникальным значением, которое полезно для повторного выбора данных соответствующего типа с помощью оператора LINQ where.
Я бы предложил создать базовый шаблонный шаблон для той же таблицы, однако LINQ в лучшем случае неудобен с наследованием, и он просто не будет работать.
Этот метод действительно вызывает немного дублирования, но все же довольно аккуратный способ достижения этого, с меньшими недостатками, чем другие предлагаемые методы.
Если вы хотите выбрать все данные из таблицы, независимо от типа варианта, я бы предложил использовать оператор объединения с отдельным промежуточным классом для объединения всех результатов.
Это [статья] (http://www.codeproject.com/Articles/137509/Reading-sql_variant-in-Entity-Framework), которая может помочь. –
@ TheJonasPersson: нашел эту статью во время моего поиска, но, похоже, она 'read-only'. Мне нужно иметь возможность читать и записывать данные в этот столбец. –