快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

EF6秘籍2th:实体数据建模基础(十二)使用条件过滤对象集合-创新互联

问题:

我们提供的服务有:成都网站设计、网站建设、外贸网站建设、微信公众号开发、网站优化、网站认证、嘉兴ssl等。为1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的嘉兴网站制作公司

   在实体类型上生成一个永久性的过滤,使其能够映射为表中记录的子集。

解决方案:

   有一张保存账号信息的表,如下图所示。这个表有一个DeletedOn的可空列,用于保存账号被删除的日期和时间。如果账号仍然是激活的,这个列为空。我们想我们的Account集合仅仅表示激活的账号,也就是这个账号没有DeletedOn值。

  数据库脚本如下:

create table [Chapter2].[Account]
(
	AccountID int primary key identity(1,1),
	DeletedOn datetime null,
	AccountHolderID int not null
)

   为了建模这张表,使其仅有激活账号填充Account实体集合,完成下面的步骤:

   1、添加一个新的EDM模型。

   2、选择来自数据库的EF设计器。

   3、选择数据连接。

   4、在数据库对象和设置对话框中,选择Account表,并保持默认设置。点击“完成”。点击“EF设计器”,选择属性,设置“实体容器名”为“EF6Recipes9Context”;并修改名称空间。

   5、在EF设计器中,右击Account实体,选择“表映射”,打开“映射细节”窗口。点击“添加条件”,选择DeletedOn列;在操作列,选择“是”;在值/属性列,选择“Null”。这样就产生了一个映射条件:当DeletedOn为空时。EF6 秘籍 2th:实体数据建模基础 (十二)使用条件过滤对象集合

   6、在EF设计器中,选中Account实体的DeletedOn属性,右击,选择“删除”。由于我们正在条件映射中使用DeletedOn列,所以它不能被映射到实体的一个属性。在我们的模型中DeletedOn始终为Null。

原理:

   当我们想在一个实体上应用永久性过滤时,我们常常使用条件映射。条件映射也是实现TPH继承的关键。可应用的条件有:

    Is Null

    Is Not Null

    =

    =

            using (var context = new EF6Recipes9Context())
            {
                context.Database.ExecuteSqlCommand(@"insert into chapter2.account(DeletedOn,AccountHolderId) values('2/10/2009',1728)");
                var account = new Account { AccountHolderID = 2320 };
                context.Accounts.Add(account);
                account = new Account { AccountHolderID = 2502 };
                context.Accounts.Add(account);
                account = new Account { AccountHolderID = 2603 };
                context.Accounts.Add(account);
                context.SaveChanges();
            }
            using (var context = new EF6Recipes9Context())
            {
                foreach (var account in context.Accounts)
                {
                    Console.WriteLine("Account Id = {0}", account.AccountHolderID);  
                }
            }

   上面的代码中,我们首先使用Context的Database属性的ExecuteSqlCommand方法向数据库中插入一条记录。主要是因为我们需要插入一条DeletedOn列为非空值的情况。在我们的模型中没有这样的属性映射的这个列。事实上,Account实体类型从不实例化一个DeletedOn为非空的实例。

   EF6 秘籍 2th:实体数据建模基础 (十二)使用条件过滤对象集合

   上面的结果并不包含我们最先插入的DeletedOn为非空的记录。

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


本文标题:EF6秘籍2th:实体数据建模基础(十二)使用条件过滤对象集合-创新互联
转载来于:http://6mz.cn/article/diedhj.html

其他资讯