【发布时间】:2015-02-25 16:09:06
【问题描述】:
我的对象(oJobs)的一个属性如下:
Private _brandlist As List(Of DAL.Brand)
Public Property PostBrandList() As List(Of DAL.Brand)
Get
Return _brandlist
End Get
Set(ByVal value As List(Of DAL.Brand))
_brandlist = value
End Set
End Property
在数据库中,品牌列表存储为以逗号分隔的字符串,例如'brands' 列可以是字符串 '3,45,2',其中每个数字代表存储在另一个表中的品牌 ID。
我的选择查询如下:
Dim jobposts As List(Of oJobs) = From j In db.JobPostings
Select New oJobs With { 'hiding all others for code brevity
.PostBrandList = 'problem is here'
}
由于j.BrandList 将返回一个字符串,我需要拆分该字符串并为每个数字运行另一个查询以最终返回并将 List(Of DAL.Brand) 分配给.PostBrandList
对于那些可能会问“你尝试过什么?”的人,
- 我已经运行了查询,然后为每个添加了品牌列表 - 成功但不是最佳的
- 编写了一个将列表作为参数并返回一个单独的对象列表的函数 - 非常愚蠢。
另外,我不允许规范化数据库:(
【问题讨论】:
-
发送查询以检索您已经尝试过的 ID 列表。创建一个带有 ID 的数组并发送第二个查询并使用
.Contains获取所有带有 ID 的实体。或者,在数据库中创建一个执行此操作的存储过程。 -
正确的做法是删除您的品牌栏。这就是我们所说的内部平台效应,它不是在 RDBMS 中处理关系数据的正确方法。您应该有一个表格,将您的品牌与您的工作联系起来。由于更好的索引等,从长远来看,这将有所帮助。
-
嗨 Aron,请阅读我的最后一句话。否则我完全同意你的看法,并尝试了很多改变一些想法!
-
您刚才在代码中提到“问题就在这里”——但问题是什么?你得到了哪些错误?请将错误消息添加到您的问题中。您提到了字符串操作 - 这些在 EF 中可能会出现问题:您正在使用哪些字符串操作?
标签: vb.net entity-framework linq-to-entities entity-framework-6