实体框架:避免子对象中的主键冲突

时间:2015-02-12 12:44:34

标签: entity-framework

我对EF很新,所以这可能很简单。

基本上我想添加多个具有相同主键的子对象,但我一直遇到主键违规。

我想知道如何添加包含具有相同主键的子对象的对象列表而不抛出异常。我希望有一种方法可以告诉Add()忽略子插入(如果存在)。

我已经创建了两个简单的类来更好地描述它。

Public class Race
{
    Int Id;
    EventType Event;
}

Public class EventType
{
    Int Id;
    String Description;
}

Var event1 = new EventType();
event1.id = 1

Var event2 = new EventType();
event2.id = 1

Race race1 = new Race();
race1.id = 99;
race1.EventType = event1;

Race race2 = new Race();
race2.id = 100
race2.EventType = event2;

现在在我的DbContext中我只想做:

Db.Add(race1);
Db.Add(race2);
SaveChanges();

这会引发主键违规。

如果我将相同的EventType对象分配给两个Race实例,但是实际上我不能这样做,因为这个父对象是由数据源在外部创建的。

1 个答案:

答案 0 :(得分:0)

Var event1 = new EventType();
event1.id = 1

Var event2 = new EventType();
event2.id = 1

上面的代码片段表示您希望在事件表中添加两行,其主键值与1相同,这在数据库中是不可能的,因为主键始终具有唯一约束。

  
    

如何添加包含具有相同主键的子对象的对象列表?

  

上面的句子不是很清楚,但是如果它针对同一事件附加到多个种族,则可以像下面那样完成。

Var event1 = new EventType();
event1.id = 1

Race race1 = new Race();
race1.id = 99;
race1.EventType = event1;

Race race2 = new Race();
race2.id = 100
race2.EventType = event1;

然后拨打context.SaveChanges()