• Entity Framework的表间关系实现篇(二)


    1. 多对多的关系

    public class Lodging {
    …
    public List<Activity> Acitivities { get; set; } }
    public class Activity {
       …
        public List<Lodging> Lodgings { get; set; }
    }
    
    image

    image

    image

    在EF中的处理多对多的方式就是会生成第三张表--ActivityLodings表,用于处理这种关系,但是这张表在应用层是透明的。

    2. 一对一的关系

    不要以为两个类互相引用对方就可以实现一对一,这里存在一个主题的问题,比方说在计划生育的大环境下父亲和孩子是一对一的关系,但是毫无疑问,父亲是主体。这个时候,需要做的就是依赖体的相对应的属性上面声明外键关系以实现区分。

    另外如果没有声明外键关联,将会导致运行时错误,EF也将区分不开谁是主体。

    public class Person {
        [Key]
        public int SocialSecurityNumber { get; set; }
    …
        public PersonPhoto Photo { get; set; }
    }
     public class PersonPhoto {
         [Key]
         [ForeignKey("PhotoOf")]
         public int PersonId { get; set; }
        …
         public Person PhotoOf { get; set; }
     }
    

    如果是以上的定义方式是1..0的关系,如果是1..1的关系的话,那就应该是在Person类中的Photo属性添加[Required]的声明。不过这种约束是应用层的,在数据库层无法体现这种约束。

    如果想要捕获确切的异常,它其实是DbEntityValidationException里面的EntityValidatationErrors里面的

    image

    异常处理:

    private static void UpdateData() {
        using (var context = new BreakAwayContext()) {
            try {
                var person = new Person { FirstName = "Lorry", LastName = "Zhang" };
                context.Persons.Add(person);
                context.SaveChanges();
            }
            catch (DbEntityValidationException ex) {
                foreach (DbEntityValidationResult item in ex.EntityValidationErrors) {
                    foreach (DbValidationError error in item.ValidationErrors) {
                        Console.WriteLine("Error Message: " + error.ErrorMessage);
                        Console.WriteLine("Property Name: " + error.PropertyName);
                    }
                }
            }
        }
    }
  • 相关阅读:
    异步文档树解决方案
    兼容IE低版本的文件上传解决方案
    CentOS-常用命令(版本:7.x)
    搭建Nexus3私服(含使用说明,支持CentOS、Windows)
    CentOS-搭建MinIO集群
    GitLab升级(yum安装版v11.11.8~12.0.12)
    yum安装GitLab-v11.11.8(git私服)
    Docker中容器的备份和恢复(可迁移)
    Nexus3配置yum私服
    局域网连接数据慢的方法汇总
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/2999129.html
Copyright © 2020-2023  润新知