簡體   English   中英

代碼優先:無法創建一對多關系。 創建0…1到很多

[英]Code First : Unable to create 1 to many relationship. Creates 0…1 to many instead

顧客

public class Customer
{
    public Customer()
    {
        Addresses = new List<Address>();
        Reviews = new List<Review>();
        Products = new List<Product>();
    }
    [Key]
    public string Email { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Password { get; set; }
    public Address DefaultAddress { get; set; }
    public int DefaultAddressId { get; set; }
    public List<Address> Addresses { get; set; }
    public List<Review> Reviews { get; set; }
    public List<Product> Products { get; set; }
}

產品

public class Product
{
    public Product()
    {
        Reviews = new List < Review >();
    }

    public int Id { get; set; }
    public Category Category { get; set; }
    public string Name { get; set; }  
    public string Description { get; set; }
    public string Specification { get; set; }
    public List<Review> Reviews { get; set; }
    public List<Customer> Customers { get; set; }
}

評論

public class Review
{
    public int Id { get; set; }
    public string Text { get; set; }
    public int Stars { get; set; }
    [Required] 
    public int ProductId { get; set; }
    [Required]
    public string CustomerId { get; set; }
}

}

生成模型

在此處輸入圖片說明

我希望“評論”與“客戶”之間的關系為1對多而不是0..1對多。 每個評論必須屬於一個客戶。 我不了解如何為“評論-產品”而不是為客戶正確映射關系。

我只使用“ Customer和“ Review模型,因為這是您一次想要的答案。 以下是您的模型類應該是的。

public class Customer
{
    public Customer()
    {
        Reviews = new HashSet<Review>();
    }

    [Key]
    public string Email { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Password { get; set; }

    public ICollection<Review> Reviews { get; set; }

}

public class Review
{
    public int Id { get; set; }
    public string Text { get; set; }
    public int Stars { get; set; }
    [Required]
    public int ProductId { get; set; }
    [Required]
    public string CustomerId { get; set; }

    [ForeignKey("CustomerId")]
    public Customer Customer { get; set; }
}

這樣,您可以讓客戶評論集合並將其投射到列表中。使用linq查詢中的Include()方法來延遲加載客戶評論集合。 例如:

var customer = dbContext.Customer.Include("Reviews").where(x => x.Email == "john@gmail.com").FirstOrDefault();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM