实体框架多对多允许重复

时间:2017-03-13 17:24:34

标签: asp.net asp.net-mvc entity-framework many-to-many entity

是否可以在多对多关系中插入重复的行?这是我的班级:

public class EventPaintballBundle
    {
        [Key, Column(Order = 0)]
        public int EventID { get; set; }
        [Key, Column(Order = 1)]
        public int PaintballBundleID { get; set; }

        public virtual Event Event { get; set; }
        public virtual PaintballBundle PaintballBundle { get; set; }

        [Range(1, Int32.MaxValue)]
        public int PersonCount { get; set; }

        [Required]
        public DateTime Data { get; set; }
    }

我想插入这些值的第二行。差异在日期DatePersonCount

EventPaintballBundle xx = new EventPaintballBundle() { PaintballBundleID = 1, EventID = 155, Data = DateTime.Now, PersonCount = 5 };
                    dc.EventPaintballBundles.Add(xx);
                    dc.SaveChanges();

我想插入两个密钥的副本时收到错误。

  

{"违反PRIMARY KEY约束' PK_dbo.EventPaintballBundles'。   无法在对象' dbo.EventPaintballBundles'中插入重复键。该   重复键值为(155,1)。\ r \ n语句已经过   终止"}

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

创建一个不是以下组合的主键:

    public int EventID { get; set; }
    public int PaintballBundleID { get; set; }

新的主要内容应该是唯一的,并且与实际存在的任何内容无关,这个密钥只会使您的模型在数据库方面工作明智。

这是一个经典的错误:认为你的主键应该代表存在的东西......没有

我很难学到它:即使我认为现有数据的某些组合将永远保持独特。我不使用它。我总是从我自己的设计中创建我的主键,而不代表任何真实的。