0

mysqlフィールドは次のようになります。

既存のデータベースにmysqlを使用したEntityFramework

私のアプリケーションは、既存のデータベースを使用してmysqlでEF4.4を使用するmvc4プロジェクトです。

テーブルのすべてのフィールドがnull許容ではないが、デフォルト値がある場合、どうすればthenフィールドの一部を更新できますか。フィールドの一部のデータベースに永続的なものを作成または更新すると、EFは、明示的に指定されていないフィールドに自動的にnullを入力し、例外を取得します。

データベースを変更したくありません。これで何ができますか?ありがとうございました

編集:

このような私のコード...あなたの意見ではどのようにそれを変更しますか?

[HttpPost]
    public ActionResult Edit(Post_15 post)
    {
        if (ModelState.IsValid)
        {

            db.Entry(post).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(post);
    }
4

1 に答える 1

1

オブジェクトにデフォルト値を指定する必要があります(たとえば、コンストラクターで)。EFは、データベースのデフォルト値とうまく連携しません。デフォルトの更新では、EFは常に各列に明示的な値を送信します。明示的な値を送信すると、データベースは使用されないデフォルト値になります。アプリケーションでプロパティの値を設定しない場合、.NETのデフォルト値がデータベースに送信されます。

または、まったく異なる方法で更新を処理する必要があります。EFが他の列を更新しないように、更新する列を明示的に設定する必要があります。

var entity = new YourEntity {
    Id = 123,
    ColumnToUpdate = "ABC"
};

objectContext.Attach(entity);
ObjectStateEntry entry = objectContext.ObjectStateManager.GetObjectStateEntry(entity);
entry.SetModifiedProperty("ColumnToUpdate");
objectContext.SaveChanges();

ColumnToUpdateこのコードは、他に20個の永続化されたプロパティがある場合でも更新されます。

編集:

DbContextの代替:

var entity = new YourEntity {
    Id = 123,
    ColumnToUpdate = "ABC"
};

dbContext.Entities.Attach(entity);
DbStateEntry<Entity> entry = dbContext.Entry(entity);
entry.Property(e => e.ColumnToUpdate).IsModified = true;
dbContext.SaveChanges();

IsModified補足: falseへの設定をサポートしているのは.NET4.5のみです。

于 2012-08-23T09:28:19.223 に答える