zoukankan      html  css  js  c++  java
  • 2.配置关系

    就是通过建立类型为List<Lodging>的Lodging属性与炻Destination建立了联系。

    public class Destination {
        public int DestinationId {
            get;
            set;
        }
        public string Name {
            get;
            set;
        }
        public string Country {
            get;
            set;
        }
        public string Description {
            get;
            set;
        }
        public byte[] Photo {
            get;
            set;
        }
        public List < Lodging > Lodgings {
            get;
            set;
        }
    }
    Destination
    public class Lodging {
        public int LodgingId {
            get;
            set;
        }
        public string Name {
            get;
            set;
        }
        public string Owner {
            get;
            set;
        }
        public bool IsResort {
            get;
            set;
        }
        public decimal MilesFromNearestAirport {
            get;
            set;
        }
        public Destination Destination {
            get;
            set;
        }
    }
    Lodging

      Code First观察到您既定义了一个引用又有一个集合导航属性,因此引用默认规则将其配置为一对多关系。基于此,Code First可以确定Lodging(外键)与Destination(主键)具有依赖关系。因此获表Lodging需要要一个外键映射到Destination的主键。在第2章你已经看到,在Lodgings表中确实建立了Destination_DestinationId外键字段。

      本文将全面解析Code First在处理关系的默认规则以及如何按我们的意图覆写这些规则。

      一旦Code First已经创建了模型与关系,EF框架就会将这些关系视为与使用EDMX文件映射的POCO是类似的。所有你在使用POCO对象对EF框架编程的方法和规则仍然适用。例如,如何有一个外键属性和一个导航属性关系,EF框架就会保持他们的同步。如果存在双向关系,EF框架也同样会保持他们的同步。EF框架在什么点上同步值取决于您是否在利用动态代理。没有代理,EF框架将会隐式或显示调用DetectChanges。使用代理,同步的响应发生在属性值变更的时候。事实上你不需要关心是否调用DetectChanges因为DbConext将会在你调用任何依赖同步的方法自动调用。EF框架开发团队建议你如果需要只用动态代理;通常这都是围绕着性能调优进行的。没有代理的POCO类通常使交互关系理简化,因为你没必要知道代理相关的附加行为。

    1.多重性关系

    如前所述,Code First在看到导航属性和可选的外键属性时将创建关系。有关导航属性和外键属性的细节将帮助我们来确定多重关系的每一端。本章对外键将关注更多一点;现在我们来看看在类中没有外键属性定义的情况。

    Code First在处理多重性关系时应用了一系列规则。规则使用导航属性确定多重性关系。即可以是一对导航属性互相指定(双向关系),也可以是单个导航属性(单向关系)。

    如果你的类中包含一个引用和一个集合导航属性,Code First视为一对多关系;

    •  如果你的类中仅在单边包含导航属性(即要么是集合要么是引用,只有一种),Code First也将其视为一对多关系;
    • 如果你的类包含两个集合属性,Code First默认会使用多对多关系;
    • 如果你的类包含两个引用属性,Code First会视为一对一关系;
    • 在一对一关系中,你需要提供附加信息以使Code First获知何为主何为辅。本章后面会在"一对一关系"中提到。如果没有在类中定义外键属性,Code First将设定关系为可选(即一端的关系实          际是零对一或恰好相反,零指的是可空---译者注)。
    • 在本章的"外键"小节,你会看到当在类中定义外键属性,Code First会使用属性的可空性来确定关系是必须的还是可选的。
  • 相关阅读:
    基于Linux OpenJDK Debian的发行版的JAVA_HOME环境变量的正确目标是什么?
    redhat linux卸载默认的openjdk与安装sun的jdk
    更换介质:请把标有…… DVD 的盘片插入驱动器“/media/cdrom/”再按回车键“ 解决方法
    mysql 导出表结构和表数据 mysqldump用法
    转怎么让VI支持中文显示
    debian 更换sh的默认链接为bash
    基于percona-monitoring-plugins实现Zabbix的MySQL多端口自动发现监控
    elasticsearch中client.transport.sniff的使用方法和注意事项
    网络大数据分析 -- 使用 ElasticSearch + LogStash + Kibana 来可视化网络流量
    Parsing Netflow using Kibana via Logstash to ElasticSearch
  • 原文地址:https://www.cnblogs.com/zhuxiang1633/p/8081268.html
Copyright © 2011-2022 走看看