zoukankan      html  css  js  c++  java
  • EF 4.* Code First 遇到的问题汇总(一)

    问题一:”定义共用值的一对一关系映射”

    描述:要实现的效果类型于image 此数据库表结果。

    类结构如下:

    public class A
    {
        public int AID { get; set; }
        public string Title { get; set; }
        public B B { get; set; }
    }
    
    public class B
    {
        public int AID { get; set; }
        public string Body { get; set; }
    }
    

    解决方法:

    FluentAPI:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity().HasKey(b => b.AID);
        modelBuilder.Entity().HasRequired(a => a.B).WithRequiredPrincipal();
    }
    
    

    OnModelCreating 方法在DbContext中定义的。

    问题二:”在查询时只加载了主类的值,附属类没有加载。”

    描述:在查询时A时,结果A.B属性没有加载相应的值。

    解决方法:

    采用Include 来进行强制加载如:

    ef.Set<A>().Include(a => a.B)
     
    问题一、二参考:http://www.cnblogs.com/dudu/archive/2012/01/05/entity_framework_one_to_one_shared_primary_key.html

    问题三:”违反了引用完整性约束: 在此关系的主对象和依赖对象之间,定义引用约束的属性值不一致。”

    描述:我通过实例A修改B中的类型然后出现改错误,如:A.B.Body = “TEST”;

    问题原因:是因为A.B的实例中AID的值为“0”

    解决方法:将A.B的实例的AID的值附成A.AID的值。

    问题四:”如果想将A和B的内容修改后同时保存,结果B没有保存成功“

    问题原因:是因为A.B的实例EntityState没有修改造成的。

    解决方法:

    db.Entry(A.B).State = EntityState.Modified;
    db.Entry(A).State = EntityState.Modified;

    注:db是继承自DbContext的实例。

  • 相关阅读:
    HackerRank
    HackerRank
    LeetCode "Kth Smallest Element in a BST"
    HackerRank
    HackerRank
    LeetCode "Roman to Integer"
    LeetCode "Integer to Roman"
    LeetCode "Majority Element II"
    HackerRank
    HackerRank
  • 原文地址:https://www.cnblogs.com/jiguixin/p/2998120.html
Copyright © 2011-2022 走看看