C# EF代码第一配置复制记录

C# EF代码第一配置复制记录,c#,ef-code-first,entity-framework-5,C#,Ef Code First,Entity Framework 5,所以我试图用EF5中的种子数据填充一个表。我有一份50个州和特区的名单。我还有一个ID为1-6的RequestTypes查找表。应该是这样的: +----+----------+-------------+------------+ | Id | State | SurveyId | RequestType| +----+----------+-------------+------------+ | 1 | Alabama | 0 | 1

所以我试图用EF5中的种子数据填充一个表。我有一份50个州和特区的名单。我还有一个ID为1-6的RequestTypes查找表。应该是这样的:

+----+----------+-------------+------------+
| Id |  State   |  SurveyId   | RequestType|
+----+----------+-------------+------------+
|  1 | Alabama  |           0 |          1 |
|  2 | Alabama  |           0 |          2 |
|  3 | Alabama  |           0 |          3 |
|  4 | Alabama  |           0 |          4 |
|  5 | Alabama  |           0 |          5 |
|  6 | Alabama  |           0 |          6 |
+----+----------+-------------+------------+
表示此表的模型:

public class StateSurveyAssignment{
    public long Id { get; set; }
    public string State { get; set; }
    public long RequestTypeId { get; set; }
    public long SurveyId { get; set; }
}
以及在Configuration.cs中为数据库设定种子的代码:

foreach (var state in Enum.GetValues(typeof(State))) {
     foreach (var type in context.RequestTypes){
          context.StateSurveyAssignments.AddOrUpdate(
                ssa => ssa.Id,
                new StateSurveyAssignment{
                    State = state.ToString(),
                    RequestTypeId = type.Id
                }
           );

       }
 }
我的问题是,seed方法不是更新/不处理未更改的记录,而是复制每一行。我试图手动设置Id,但没有成功

编辑:

这就是数据库复制的外观:

+----+----------+-------------+------------+
| Id |  State   |  SurveyId   | RequestType|
+----+----------+-------------+------------+
|  1 | Alabama  |           0 |          1 |
|  2 | Alabama  |           0 |          2 |
|  3 | Alabama  |           0 |          3 |
|  4 | Alabama  |           0 |          4 |
|  5 | Alabama  |           0 |          5 |
|  6 | Alabama  |           0 |          6 |
| ...|   ...    |     ...     |      ...   |
|307 | Alabama  |           0 |          1 |
|308 | Alabama  |           0 |          2 |
|309 | Alabama  |           0 |          3 |
|310 | Alabama  |           0 |          4 |
|311 | Alabama  |           0 |          5 |
|312 | Alabama  |           0 |          6 |
+----+----------+-------------+------------+
我的解决方案

我发誓我曾经尝试过在某个时候设置我自己的Id,但根据答案再次尝试,似乎效果不错。我的最终解决方案:

int counter = 1;
foreach (var state in Enum.GetValues(typeof(State))) {
        foreach (var type in context.RequestTypes){
             context.StateSurveyAssignments.AddOrUpdate(
                   ssa => ssa.Id,
                   new StateSurveyAssignment{
                        Id = counter,
                        State = state.ToString(),
                        RequestTypeId = type.Id
                    }
              );
          counter++;
         }
}

问题可能是
statesurveyaSignment
类中的
Id
属性是数据库中的标识列。 这意味着每一行都不是唯一的

例如,您尝试使用
AddOrUpdate()


然后每个条目都有一个不同的
Id
,因此您将有重复项

什么是
AddOrUpdate
?@lazyberezovsky很有趣。。我不知道,谢谢你能告诉我你的实际结果吗?密苏里州的
6
记录是否与
RequestType
相同,等于
1
?@lazyberezovsky不太一样。这是另一组状态1-6,但我用更好的解释更新了这个问题。
var model = new StateSurveyAssignment
{
    State = "Alabama",
    RequestTypeId = 1L,
    SurveyId = 0L
};