1

我有一个产品类:

public class Product
{
    public int ID { get; set; }

    [Required]
    public string Name { get; set; }
    public decimal Price { get; set; }

    public Offer Offer { get; set; }
}

还有一个 Offer 类:

public class Offer
{
    public int ID { get; set; }

    [Required]
    public DateTime DateFrom { get; set; }
    public DateTime DateTo { get; set; }
    public decimal OfferPrice { get; set; }
    public Product Product { get; set; }
}

基本上我想要实现的是在添加报价时,产品与此报价相关。因此,要约总是有产品,但产品并不总是需要要约。如果产品确实有优惠,我希望能够通过 访问它Product.Offer,但在此设置中,我在更新数据库时收到以下错误消息:

无法确定类型“WebshopISEC.Models.Offer”和“WebshopISEC.Models.Product”之间关联的主体端。此关联的主体端必须使用关系流式 API 或数据注释显式配置。

我尝试了很多东西(数据注释和 Fluent API)并无休止地搜索,但我似乎无法解决这个问题。我尝试过的 Fluent API 方法:

modelBuilder.Entity<Offer>()
            .HasRequired(x => x.Product)
            .WithOptional(x => x.Offer);

但这无济于事,我该如何分配校长端?上什么课?

4

3 回答 3

2

尝试这个:

public class Product
{
    public int ID { get; set; }

    [Required]
    public string Name { get; set; }
    public decimal Price { get; set; }

    public Offer Offer { get; set; }
}

public class Offer
{
    [ForeignKey("Product")]
    public int ID { get; set; }

    [Required]
    public DateTime DateFrom { get; set; }
    public DateTime DateTo { get; set; }
    public decimal OfferPrice { get; set; }
    public Product Product { get; set; }
}
于 2013-10-30T17:24:08.130 回答
1

当您具有一对一关系时,一个实体必须是委托人,而另一个实体必须是从属实体。在这种情况下,我建议您通过像这样使用数据注释来确保 ProductId 在 Offer 中是 FK 和 PK:

    public class Product
    {
        public int ID { get; set; }
        [Required]
        public string Name { get; set; }
        public decimal Price { get; set; }
        public Offer Offer { get; set; }
    }

    public class Offer
    {
        public int ID { get; set; }
        [Required]
        public DateTime DateFrom { get; set; }
        public DateTime DateTo { get; set; }
        public decimal OfferPrice { get; set; }
        [Required]
        public Product Product { get; set; }
    }

另一方面,您对您的项目了解更多,但我也建议您使用 1:N 关系。希望它奏效了。

于 2013-10-30T17:31:14.233 回答
0

对于一对多关系,我有类似的错误消息。我忘记在我的父属性上显式使用 ForeignKey 属性。然后,当我尝试添加该属性时,我得到了一个无法运行的迁移。我能够通过编辑迁移来解决该错误

public override void Up()
{

    //DropIndex("dbo.PurchaseManifestLines", new[] { "PurchaseOrderLineId" });
    //RenameColumn(table: "dbo.PurchaseManifestLines", name: "PurchaseOrderLineId", newName: "PurchaseOrderLine_Id1");
    //AddColumn("dbo.PurchaseManifestLines", "PurchaseOrderLine_Id", c => c.Int(nullable: false));
    //AlterColumn("dbo.PurchaseManifestLines", "PurchaseOrderLine_Id1", c => c.Int());
    //CreateIndex("dbo.PurchaseManifestLines", "PurchaseOrderLine_Id1");
    // gives error Column names in each table must be unique. Column name 'PurchaseOrderLine_Id' in table 'dbo.PurchaseManifestLines' is specified more than once.


    //replaced with 
    DropIndex("dbo.PurchaseManifestLines", new[] { "PurchaseOrderLineId" });
    DropColumn("dbo.PurchaseManifestLines", "PurchaseOrderLineId");

}
于 2017-06-24T06:58:49.600 回答