Files
。Name
,CreatedDate
等。FileBytes
。所以我们的模型看起来类似于:
public class FileEntity
{
public string Name { get; set; }
public DateTime CreatedDate { get; set; }
public byte[] FileBytes { get; set; }
// many other fields, most of which we'd like to use
}
FileBytes
是null
,而不关心字节本身。FileHasBytes
是bool
。我如何使用EF6在我的模型类上定义一个字段,该字段将根据表中的另一个字段进行一致投影,而不会拉出该字段的全部内容?
答案 0 :(得分:2)
使用当前版本的EF6,您无法完全按照自己的意愿行事。
还有其他选择,但是对于所有这些选择,你必须对上述目标作出妥协。例如,使用具有计算属性的新投影类型,或者不查询计算值并在条件上明确,等等。
但是,使用像DelegateDecompiler之类的东西,可能就像你期望的那样拥有模型和查询。
有些事情:
def update
your_model = YourModel.find(params[:id])
# find the attributes with nil values:
nil_attributes = your_model.attributes.select {|k,v| v.nil?}.keys.map(&:to_sym)
# attributes that you allow to edit:
allowed_attributes = [:title, :description, :size]
# tell rails which are the allowed modifications:
allowed_params = params.require(:your_model).permit(*(allowed_attributes - nil_attributes))
# save the changes:
your_model.update_attributes(allowed_params)
# ...
end
在您的查询中,您将使用[Computed]
public bool HasFileBytes
{
get { return FileBytes != null; }
}
调用来翻译:
.Decompile()
使用Linq.Translations可能是另一种类似的选择。
来源:http://www.daveaglick.com/posts/computed-properties-and-entity-framework
答案 1 :(得分:1)
这不理想,但我认为你可以添加一个返回QueryExpression的静态属性,如
public static Expression<Func<FileEntity,bool>> FileHasBytes
{
get { return ((c)=> c.FileBytes != null && SqlFunctions.DataLength(c.FileBytes)>0)
}
我没有尝试过这段代码,所以请尝试使用盐,所以请尝试彻底测试。
前段时间我使用过Dynamic.linq这样的东西,但最近没有尝试过
dbContext.FileEntities.Where("FileHasBytes == true"),