EF CF - List原始类型
本文关键字:原始 类型 CF List EF | 更新日期: 2023-09-27 18:04:24
我有以下内容:
public class Broadcast {
public int NumUsersToMessage { get; set; }
public int NumMessagesQueued { get; set; }
public string DbUsersMessaged { get; set; }
public int NumMessagesSent {
get {
return UsersMessaged.Count();
}
}
public List<int> UsersMessaged {
get {
return DbUsersMessaged == null ? new List<int>() : DbUsersMessaged.Split(',').Select(Int32.Parse).ToList();
}
set {
DbUsersMessaged = value != null ? String.Join(",", value) : null;
}
}
}
我的目标是只通过UsersMessaged
访问DbUsersMessaged
。我试图做broadcast.UsersMessaged.Add(2)
,然而,因为这不是一个分配,我不能得到属性的行为,因为我喜欢。相反,我必须这样做:
tempList = broadcast.UsersMessaged();
tempList.Add(2);
broadcast.UsersMessaged = tempList;
db.SaveChanges();
这显然是笨拙的。我正在考虑制作一个AddReassign
扩展方法,但我想知道—这里支持基本类型列表的标准实践是什么?看起来,即使使用扩展方法,我最好的镜头看起来像这样:
broadcast.UsersMessaged = broadcast.UsersMessaged.AddReassign(2) // yuck!
在没有人问之前-出于性能原因,我们有意对其进行了非规范化。
如果你不关心性能,你可以创建自己的列表:
public class MyList : IList<int>
{
private List<int> underlyingList;
private Broadcast entity;
public MyList(Broadcast entity)
{
this.entity = entity;
this.underlyingList = entity.DbUsersMessaged?.Split(",") ?? new List<int>();
}
public void Add(int i)
{
this.underlyingList.Add(i);
this.entity.DbUsersMessaged = String.Join(",", underylingList);
}
// other interface memebers impl
}
然后MyList list;
public IList<int> UsersMessaged {
get {
return myList ?? (myList = new MyList(this));
}
}
当然这只是样品。
我建议你看看这个:实体框架5 -寻找中心点执行自定义代码实体从数据库加载后
然后从字符串转换为列表,然后在保存时使用save Changes事件将其转换回字符串结构。
然后,为了性能,也许您想使用byte[]
而不是字符串来存储数据库中的数据。