在EF 6.x系列中写过一篇文章可以映射私有属性,说明EF的灵活性以及可扩展性,那么问题来了在EF Core是否同样可以呢,我们来试试。
如上代码,我们将Name设置私有属性,接下来我们利用EF Core提供给我们的APi来访问是否可以进行映射到数据库表中呢?我们来尝试一下。
在EF Core中如若我们需要访问元数据,则需要借助于在映射配置中即如上builder中的Metadata属性来访问,比如访问属性、主键、外键、导航属性皆可,接下来我们迁移看看。
通过迁移生成的SQL语句我们就可得出结论:在EF Core中映射私有属性和EF 6.x如出一辙,只不过使用方式略有不同罢了。
当然实际场景中,若属性为私有,那就没有映射到数据库中的必要了,这里只是作为探讨。
下面我们再来看看实际场景,比如上述中的Name属性为计算属性,那么此时我们会进行如下映射:
此时我们在控制台进行如下提交:
因为我们将上述Name配置为计算属性,但是此时Name属性中的SET访问器是公共的,所以可能会有误操作对其进行赋值,当然即使手动赋值,最终依然能正确提交,结果不受任何影响,只能说这样可读性不太好。
既然Name为计算属性即数据库自动为其赋了值,那么我们为何不将SET访问器设置为私有的呢,保持其只读而不可设置呢,改造如下即可:
如上设置Name为私有即不能手动为其赋值,那么我们可以视为计算属性或者传参赋值,如下:
在EF Core中利用构造函数传参,那么必须显式存在无参构造函数,否则抛出异常,你懂的。再进一步讲,我们也可将Name属性作为只作为字段来访问,配置成如下即可。
本节稍微探讨了下EF Core中如何映射私有属性,虽然没有什么实际作用,可作为了解。
想必很多时候,我们都会将属性GET或者SET访问器都设置为公共的,虽然简便但可读性并那么强,是计算属性、还是字段等等,都应显式设置,这样可读性会更好。
领取专属 10元无门槛券
私享最新 技术干货