当前位置: 首页 > 编程语言 > C#

使用实体框架添加具有新导航属性的新实体Share

时间:2023-04-10 14:11:41 C#

使用实体框架添加具有新导航属性的新实体我有一个类模型,允许我将functionImage添加到ProductType实体。单个ProductType类定义标识引用特定图像的HomePageImageId和HomePageImage导航属性。我有一个Image类定义,其中包含图像的所有元信息(即宽度、高度、格式类型、名称等)。我还有一个包含实际图像数据的ImageData类定义。这与通过上述Image类提供的元信息具有FK关系。这就是EF实体的样子。[DataContract][Table("ProductTypes")]publicclassProductType:IEntity{[Key][DataMember][Column("Id")]publicInt64Id{get;放;}[DataMember][DataType(DataType.Text)][Column("Name")]publicStringName{get;放;}[DataMember][DataType(DataType.MultilineText)][Column("Description")]publicStringDescription{get;放;}[DataMember][DataType(DataType.MultilineText)][Column("Excerpt")]publicStringExcerpt{get;放;}[DataMember][Column("ImageId")]publicInt64?ImageId{得到;放;}[ForeignKey("ImageId")]publicvirtualImageHomePageImage{get;放;}}[DataContract][Table("Images")]publicclassImage:IEntity{[Key][DataMember][Column("Id")]publicInt64Id{get;放;}[DataMember][Column("Name")][DataType(DataType.Text)]publicStringName{get;放;}//附加属性已删除[DataMember][Column("DataId")]publicInt64DataId{get;放;}#region导航属性[ForeignKey("DataId")]public虚拟ImageDataImageData{get;放;}#endregion}[DataContract][Table("ImageData")]publicclassImageData:IEntity{[Key,ForeignKey("Image")][DataMember][Column("Id")]publicInt64Id{get;放;}[Column("Data")][MaxLength][DataType(DataType.Upload)]publicbyte[]Data{get;放;}publicvirtualImageImage{get;放;从结构上看,这一切看起来都很好问题是,当我想添加新图像时,出现以下错误。无法插入外键值,因为对应的主键值不存在。[Foreignkeyconstraintname=ImageData]我理解错了。我只是不确定为什么会这样。存储库中的AddImage方法类似于以下代码片段,其中“image”参数不仅包含Image元数据,还包含其ImageData属性,该属性已成功填充包含图像byte[]信息的ImageData实例。每个实体都是新的,Id为0。publicstaticImageAddImage(Imageimage){Imageret=null;using(Contextctx=newContext()){图片ret=ctx.Images.Add(image);ctx.SaveChanges();返回ret;以为是因为ImageData实例已经分配给Navigation属性,ADD将管理两者之间的关系,插入它们并更新键是必要的。至少这就是我过去看到它的工作方式。它接近这篇文章,但他指的是一个现有实体,我希望创建两个新实体。谁能看到我在这里缺少什么?更新11/05/2013我已经将代码压缩到更少的行,希望缩小对问题的关注……我仍然遇到错误。using(Contextctx=newContext()){////初始化一个ProductType实例。ProductTypeproductType=ProductRepository2.GetProductType(ctx,productTypeId);productType.Description=txtDescription.Text.Trim();productType.Excerpt=txtDescription。Text.Substring(0,(txtDescription.Text.Trim().Length0){ImageDataimgData=newImageData{Data=fileUpload.FileBytes};productType.HomePageImage=Infrastructure.Utils.ImageUtils.GetPostedImage(fileUpload.PostedFile);productType.HomePageImage.ImageData=imgData;productType.HomePageImage.DateAdded=DateTime.Now;productType.HomePageImage.DateUpdated=DateTime.Now;}ctx.SaveChanges();}您可能想尝试使用Association而不是ForeignKey引用:[Association("FK_MyName","ImageId","ImageId")]我过去用它来为RIA服务创建自定义实体我在这里所做的是创建一个ProductTpe对象并将Image对象分配给ProductType对象当我在上下文中将ProductType对象添加到ProductTypes并调用saveChanges()方法时,它会在数据库中创建ImageData、Image和ProductType。以上就是C#学习教程:使用实体框架添加具有新导航属性的新实体。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——,Image=newImage//你可以在这里直接赋值你的图像对象{Name="name",ImageData=newImageData{Data=newbyte[0];//使用你的数据}}};using(Contextctx=newContext()){ctx.ProductTypes.add(prodObj);ctx.saveChanges();返回产品对象;}本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: