具有多对多关系的代码优先模型POCO

时间:2013-06-06 14:16:01

标签: c# ef-code-first asp.net-web-api

这是我一直在做的一个小练习,习惯于使用“Code First” - 方法进行编码。 实际上,如果我能“保守地”“数据库优先”这样做,我想,我会更快地设置它,但是我不会对这些新东西有所了解,所以我想尝试一下。 这些是我在我的应用程序中需要的实体:

  • 项目(几乎只有标题,描述和ID,可能会有其他信息)
  • ItemPrice(因为标题告诉它应该表示某个时间项目的价格,所以这需要能够引用一个项目并且还存储一个DateTime值和一个Decimal的价格)
  • ItemRecipe(这包含一种可以创建项目的方式,可能有不同的方法来构造项目,这就是为什么这不是Item-class本身的一部分,所以这引用了一个目标项目和一个元组列表[项目/金额对])

现在插入和更新物品和价格,这对我有用,我的问题是食谱;我还不知道如何编写配方-POCO(我认为包含列表的virtual甚至可能是错误的)

我写了POCO课程:

档案:

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

        [Required(ErrorMessage = "Please enter a title for this item.")]
        [MaxLength(127)]
        public string Title { get; set; }

        [Required(ErrorMessage = "Please enter a descriptive text for this item.")]
        [MaxLength(4000)]
        public string Description { get; set; }
}

ITEMPRICE:

    [DataContract]
    public class ItemPrice
    {
        public int ID { get; set; }

        [Required(ErrorMessage = "You need to select an item for this price.")]
        [DataMember(IsRequired = true)]
        public int ItemID { get; set; }

        [ForeignKey("ItemID")]
        public virtual Item Item { get; set; }

        [Required(ErrorMessage = "You need to set a price for this item.")]
        [DataMember(IsRequired = true)]
        public Decimal Price { get; set; }

        [Required(ErrorMessage = "You need to provide a date and time for the price for this item.")]
        [DataMember(IsRequired = true)]
        public DateTime Time { get; set; }
    }

ItemRecipe:

    [DataContract]
    public class ItemRecipe
    {
        public int ID { get; set; }

        [Required(ErrorMessage = "You need to select an item for this recipe.")]
        [DataMember(IsRequired = true)]
        public int ItemID { get; set; }

        [ForeignKey("ItemID")]
        public virtual Item TargetItem { get; set; }

        public virtual List<Tuple<Item, int>> Ingredients { get; set; }
    }

那么有人能指出我需要如何设置它吗? 另外,我如何告诉这个元组列表,它的item-part实际引用了一个不能在列表中出现两次的现有项?这甚至可以仅通过数据注释完成吗?如果不是我需要什么?

基本上我只想访问这个项目中其他实体的配方,我使用通用存储库来检索/操作值。我使用的api控制器只有简单的Get- / Post- / Put- / Delete-方法,所以更新或创建一个配方我会去覆盖它(不是逐个插入成分项目数量)。

0 个答案:

没有答案