所以我正在尝试创建一个简单的Product-Preview 1对1关系,如下所示:
public class Product : BaseEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public string name { get; set; }
public virtual EPS eps { get; set; }
public virtual Preview preview { get; set; }
[ForeignKey("userId")]
public virtual User user { get; set; }
public Guid userId { get; set; }
}
和
public class Preview : BaseEntity
{
[Key,ForeignKey("Product")]
public Guid Id { get; set; }
public string imagePath { get; set; }
public double width { get; set; }
public double height { get; set; }
public virtual List<TextPreview> Texts { get; set; }
public virtual List<ImagePlaceHolder> ImagePlaceHolders { get; set; }
[ForeignKey("ProductId")]
public virtual Product Product { get; set; }
public virtual Guid ProductId { get; set; }
}
我希望在Previews表中有一个指向产品的外键 但是在运行迁移之后我就把它作为常规字段
我做错了什么?
答案 0 :(得分:0)
你几乎拥有它,你只是错过了一块拼图...
[ForeignKey("ProductId")]
public virtual Product Product { get; set; }
您还需要添加...
public Guid ProductId { get; set; }
到预览对象。
还值得注意的是,ForeignKey属性可以放在任一属性上,字符串必须引用该对中的另一个。
正如它当前编写的那样,您正在尝试使Id属性指定相关表上的主键和外键的值。
所以你的最终代码可能看起来像......
public class Product : BaseEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[ForeignKey("User")]
public Guid UserId { get; set; }
public string name { get; set; }
public virtual EPS eps { get; set; }
public virtual Preview preview { get; set; }
public virtual User user { get; set; }
}
和
public class Preview : BaseEntity
{
[Key]
public Guid Id { get; set; }
[ForeignKey("Product")]
public Guid ProductId { get; set; }
public string imagePath { get; set; }
public double width { get; set; }
public double height { get; set; }
public virtual List<TextPreview> Texts { get; set; }
public virtual List<ImagePlaceHolder> ImagePlaceHolders { get; set; }
public virtual Product Product { get; set; }
}
作为旁注,我还建议不要使用像List<T>
这样的具体集合类型,而是使用类似IList<T>
或ICollection<T>
的内容,以促进更好的代码重用和可扩展性。