在这个确定属性是否包含给定属性的最快方法问题的答案中,用户Darin Dimitrov假定表达式树比反射更安全.这是真的,如果是这样,为什么会这样呢?
我正在尝试检查属性是否已应用DataMemberAttribute(使用TypeDescriptor)
这就是我现在拥有的:
PropertyDescriptor targetProp = targetProps[i];
var has = argetProp.Attributes.Contains(
Attribute.GetCustomAttribute(typeof(DataMemberAttribute).Assembly,typeof(DataMemberAttribute)));
Run Code Online (Sandbox Code Playgroud)
问题是
Attribute.GetCustomAttribute(typeof(DataMemberAttribute).Assembly,typeof(DataMemberAttribute))
Run Code Online (Sandbox Code Playgroud)
返回null
我们假设我有以下课程:
public class Show
{
public string Language { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
根据这些信息,我的目标是创建一个这样的lambda表达式:
g => g.Language == lang && g.Name == name
Run Code Online (Sandbox Code Playgroud)
lang
并且name
是我想在创建表达式时添加为常量值的局部变量.
如您所见,编译的函数将是类型 Func<Genre, bool>
为了帮助您更清楚地理解,我想实现与此类似的东西:
string lang = "en";
string name = "comedy";
Genre genre = new Genre { Language = "en", Name = "comedy" };
Expression<Func<Genre, bool>> expression = CreateExpression(genre, lang, name);
// expression = (g => g.Language == "en" && g.Name == "comedy")
Run Code Online (Sandbox Code Playgroud)
我知道表达式树的存在,但我对这个主题几乎是新手,所以我甚至不知道如何开始.
这个问题可以解决吗?如何动态创建这样的表达式?
我编写了自定义属性属性并将其设置在我的类中的几个属性上.现在我想在运行时只获取具有此属性的属性,能够获取属性的值以及属性字段的值.你能帮我完成这项任务吗?感谢帮助
我的解决方案中有一个数据库优先,代码生成的EF数据项目.
我需要做的是确定我的模型中的哪些字段被定义为NOT NULL
(即需要)在数据库中.这对于值类型(整数,浮点数,小数等)并不困难,因为如果DB允许空值,则它们被EF代码生成器定义为可空类型.
但是,当字段是引用类型时,我无法弄清楚如何确定字段是否定义为数据库中的NULL
/ NOT NULL
.
这似乎是一个显而易见的问题,但我无法通过Google或其他方式找到解决方案.使用EF模型时,如何在保存操作成功之前查询模型上是否需要填充哪些字段?
一种不同的方法
在重新访问这个问题之后,我想我会做一些进一步的研究.首先,通过Visual Studio添加实体,在单步执行EF向导后,.edmx
生成了一个文件.我之前已多次访问此文件,并且我已更新并将表添加到此文件中.
今天,我决定在设计师中打开它并查看我的一些领域的一些属性.果然,我的nvarchar NOT NULL
田地上有一个叫做的属性Nullable
.
那么,我如何使用EF并获取Nullable
属性设置为的实体的字段列表false
?