实体框架代码中的外键为Null
本文关键字:Null 框架 代码 实体 | 更新日期: 2023-09-27 18:22:16
我有一个经典的场景产品-品牌关系。我的课是这样的。
公共类产品{public int ProductID{get;set;}公用字符串ProductName{get;set;}公共十进制价格{get;set;}公共字符串PreDescription{get;set;}公共int?BrandID{get;set;}//自有品牌;公共虚拟品牌{得到//{if(this.Brand==null)Brand=new Brands();return Brand;}集合//{品牌=价值;}}}公共类品牌{public int BrandID{get;set;}公共字符串BrandName{get;set;}private List产品;公共虚拟列表产品{get{if(this.products==null)products=new List();return products;}设置{products=value;}}}
还有这样的映射。
公共类ProductsMap:EntityTypeConfiguration{公共产品映射(){ToTable("产品");HasKey(p=>p.ProductID).Property(p=>p.ProductID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);这HasOptional(p=>p.Brand)。WithMany(b=>b.Products);}}公共类BrandsMap:EntityTypeConfiguration{公共品牌地图(){ToTable("品牌");HasKey(b=>b.BrandID).属性(b=>b.BrandID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);}}
我有两个方法,GetAll(),GetByID()"产品"表上的某一行具有Null值。
当我尝试运行GetAll方法时,它抛出了Null异常(某些产品的品牌返回Null),但GetByID()获得的所有产品都没有抛出任何异常?
从dB中获取值时,包括关联表(Products)和父表(Brands)。
示例:
var brands=context.Brand.include("Products");