使用迁移更新代码优先数据库

时间:2017-09-15 09:43:07

标签: entity-framework data-migration c#-6.0

我已经通过了this question here的答案,到目前为止还没有提及或已经解决了问题。

修改

我尝试过的事情:

  • 更新了__MigrationHistory表中的ContextKey列。
  • 从旧版本的项目中复制了所有较旧的迁移。

问题

我刚刚在我的应用中遇到一个错误,该错误是由列中的0值引起的,该列应该链接2个表。因此,我更新了我的数据模型以构建它们之间的关系:

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    Context ctx;
    private SharedPreferences pref;


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        pref = this.getActivity().getSharedPreferences("Users",0);
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

        String new_month = "";

        if(Integer.parseInt(String.valueOf(month))<10) {
            new_month="0"+String.valueOf(month);
        }else{
            new_month = String.valueOf(month);
        }
        Log.d("month new",year+"-"+new_month+"-"+dayOfMonth);

        SharedPreferences.Editor editor = pref.edit();
        editor.putString(Constants.SELECTED_DATE,year+"-"+new_month+"-"+dayOfMonth);
        editor.apply();

        Log.d("shared pref",pref.getString(Constants.SELECTED_DATE,""));

        LayoutInflater inflater = LayoutInflater.from(this);
        View myView = inflater.inflate(R.layout.activity_main, null);
        TextView tv_datePick = (TextView) myView.findViewById(R.id.pickDate);
        tv_datePick.setText(pref.getString(Constants.SELECTED_DATE,""));


    }
}

我拥有的其他一个表名为Campaigns,所以现在添加了设置我的外键的迁移,我想public class ContactGroup { public int Id { get; set; } public string Name { get; set; } } public class Contact { public int Id { get; set; } public ContactGroup ContactGroup { get; set; } // other contact columns go here }

这是我的问题所在,因为我收到错误说:

  

已有一个名为&#39; Campaigns&#39;在数据库中。

我知道数据库中已有一个具有此名称的对象,因为它是我与之建立关系的对象之一。

这是“实体框架”生成的迁移

update-database

那么解决此问题的最佳方法是什么?现在应用此迁移?

1 个答案:

答案 0 :(得分:0)

只需从生成的迁移中删除定位CreateTable的{​​{1}}方法即可。对于将来的迁移,将不会添加此项,因为模型实际上已在dbo.Campaigns表中进行序列化,并且它知道您已对其采取了操作。

这会记录在__MigrationHistory表的Model列中,并且它知道__MigrationHistory已经存在,并且不会再尝试创建它。

希望这有帮助