我和EF4 Code First一直在玩很多游戏,我很喜欢它。但是,我似乎无法解决这个问题。
尝试创建此类内容时,我的数据库中不会创建任何列:
public IList<String> Recievers { get; set; }
public List<String> RecieversTest { get; set; }
public virtual List<String> RecieversAnotherTest { get; set; }
public virtual ICollection<Int32> RecieversAnotherTest { get; set; }
我试过Annotations将它映射到一个不同的列名,我尝试了IEnumerable和各种其他集合,但它拒绝为它创建一个列。
在谷歌上一个小时后,我找到了一个声称自己已经做过的人,但我开始怀疑这一点。它应该可能吗?
我真的不明白为什么它不会创建一个列并使用JSON或CSV。 它不可能那么罕见,可以吗?在我的情况下,我只想存储一个电子邮件列表。
我错过了什么?该项目创建所有其他类型没有问题,我已经检查了数据库,看看我添加到测试的其他属性是如何创建的,而这些属性被忽略。
所以问题必然在于我缺少某些设置或某些配置.... SQL Server 2008 db上的EF 4.1 RTW。
答案 0 :(得分:20)
我有个坏消息。 EF没有做那样的事情。如果你想要任何序列化和反序列化你必须自己做=你必须使用序列化值公开和映射属性:
private IList<String> _receivers;
// This will be skipped
public IList<String> Receivers
{
get
{
return _receivers;
}
set
{
_receivers = value;
}
}
// This will be mapped
public string ReceiversSer
{
get
{
return String.Join(";", _receivers);
}
set
{
_receivers = value.Split(';').ToList();
}
}
现在ReceiversSer
将映射到数据库中的一列。
答案 1 :(得分:1)
您不能拥有基于某个集合/列表的列。列是单个项目,例如public string Receiver
。
如果您希望EF CF获取您的IList或List并从中生成多个列,那么您是正确的,因为它不会。
在EF CF中,您可以在实体中创建列表以表示与另一个表的关系。订单中可能包含许多项目。在这种情况下,您将拥有一个Order类,其中包含OrderItem对象的列表。
然后,您将拥有一个OrderItem类来描述OrderItem表。这将基本上代表Order和OrderItems的1对多关系。