Я нашел это решение. Это не так чисто, как я хотел, но кажется, что ничего лучше не получается.
с учетом этой базовой сущности,
public class Institute
{
public int InstituteID { get; set; }
public string Name { get; set; }
// other properties omitted
}
Я добавил в базу данных поле XML с именем Данные, содержащее несколько строк, используя этот простой шаблон
<values>
<value>Value 1</value>
<value>Value 2</value>
<value>Value 3</value>
</values>
В объекте я добавил эти свойства и сопоставил поле базы данных «Данные» со свойством «DataRaw».
protected string DataRaw
{
get
{
if (_Data == null)
return _DataRaw;
else
return new XElement("values", from s in Data select new XElement("value", s)).ToString();
}
set
{
_DataRaw = value;
}
}
private string _DataRaw;
private string[] _Data;
public string[] Data
{
get
{
if (_Data == null)
{
_Data = (from elem in XDocument.Parse(_DataRaw).Root.Elements("value")
select elem.Value).ToArray();
}
return _Data;
}
set
{
_Data = value;
}
}
Это решение работает. Вот пример кода:
class Program
{
static void Main(string[] args)
{
var ctx = new ObjectContext("name=TestEntities");
var institute = ctx.CreateObjectSet<Institute>().First();
System.Console.WriteLine("{0}, {1}", institute.InstituteID, institute.Name);
foreach (string data in institute.Data)
System.Console.WriteLine("\t{0}", data);
institute.Data = new string[] {
"New value 1",
"New value 2",
"New value 3"
};
ctx.SaveChanges();
}
}
У кого-нибудь есть лучшее решение?