1

ユーザーと電話の 2 つのエンティティがあります。関係は1対1です。マッピングは

public class User 
{
    public virtual Phone Phone { get; set;}

    public virtual int PhoneId { get; set;}
}

public class Phone 
{
    public virtual string Number { get; set;}
}

ユーザーの私のマッピングは次のとおりです。

HasRequired(x => x.Phone).WithMany().HasForeignKey(x => x.PhoneId)

電話が割り当てられたユーザーがいます。フェ

Phone oldPhone = new Phone();
Phone newPhone = new Phone();
User user = new User();
user.Phone = old;

///Save user with phone.

user.Phone = newPhone;
///Save user  with phone.

これで、電話が割り当てられたユーザーがいます-newPhoneで、DBにoldPhone行が割り当てられていません。

親(oldPhone)なしでエンティティを削除するようにマッピングを設定するにはどうすればよいですか。

編集済み。

この記事 に従ってマッピングを変更しました

 HasRequired(x => x.Phone).WithOptional();

保存には、次の方法を使用します。

public override void Save(TEntity entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException("entity");
            }

            if (entity.Id > 0)
            {
                DbContext.Set<TEntity>().Attach(entity);
                DbContext.Entry(entity).State = System.Data.EntityState.Modified;
            }
            else
            {
                DbContext.Set<TEntity>().Add(entity);   
            }            
        } 

新しいエンティティをアタッチしても、古いエンティティは DB から削除されないため、この例では、DB oldPhone と newPhone に 2 つのエンティティがあります。

4

1 に答える 1

1

EFでマッピングしてこれを行う方法がわかりません。プロジェクトの1つとして、[保存]で確認できる親属性を作成しました。ここで使えそうです。私はこれについてコードを使ってブログ投稿をしました。parentvalidatorを使用してエンティティフレームワーク4を拡張します。UserプロパティをPhoneエンティティに追加する必要があります。

[Parent]
public virtual User User { get; set;}
于 2012-10-29T10:11:55.690 に答える