0

次の問題に直面しました。モデルのあるデータ ウェアハウスがあります

public class GameResult
    {
        public int GameResultId { get; set; }

        public virtual Competition Competition { get; set; }
        public virtual CustomDate DateGame { get; set; }       
        public virtual Contender ContenderFirst { get; set; }
        public virtual Contender ContenderSecond { get; set; }
        public virtual Location Location { get; set; }
}



public class Competition
    {
        [Key]
        public int CompetitionId { get; set; }
        public string Name { get; set; }

        //Lazy loading
        public virtual KindSport KindSport { get; set; }


    }

ファクトテーブルのデータを生成するようなものGameResult

gameResult.Location = location;
gameResult.Competition = competition;
gameResult.ContenderFirst = firstContender;
gameResult.ContenderSecond = secondContender;

public void saveGameResult(GameResult gameResult)
        {
            using (var db = new GameContext())
            {
                db.GameResults.Add(gameResult);
                db.SaveChanges();
            }

        }

しかし、データを保存しようとすると、実際にはテーブルだけでエンティティを保存しないことがわかり、子テーブルにもカスケードが保存されLocation, Contenderます。

どうすれば問題を解決できますか?

4

2 に答える 2

1

エンティティ Location と Contender を DB からロードする必要があります。それ以外の場合は、その中に挿入されます。

于 2013-04-06T21:02:31.433 に答える
1

Addオブジェクトグラフ全体を としてマークしますAdded

これを修正する方法は次のとおりです。

public void saveGameResult(GameResult gameResult, .... more arguments ....)
{
    using (var db = new GameContext())
    {
        db.GameResults.Add(gameResult);
        gameResult.Location = location;
        gameResult.Competition = competition;
        gameResult.ContenderFirst = firstContender;
        gameResult.ContenderSecond = secondContender;
        db.SaveChanges();
    }
}

ただし、さらに引数を追加する必要があります。

より退屈な方法は、すべてをそのままにして、各次元をUnChanged次のようにマークすることです。

db.GameResults.Add(gameResult);
Entry(gameResult.Location).State = EntityState.Unchanged;
...

さらに別の方法は、Id値のみを設定することです。

gameResult.LocationId = location.LocationId;
... etc.

public void saveGameResult(GameResult gameResult)
{
    ... (original code)

しかしもちろん、プリミティブ Id プロパティはファクト クラスの一部であり、外部キーの関連付けを形成する必要があります。

于 2013-04-06T22:53:01.043 に答える