2017-12-01 7 views
2

私のデータモデルは現在非常に単純です。あなたにはユーザーがいて、レストランがあります。間には、「レビュー」と呼ばれる多対多の関係があります。Entity Framework - ナビゲーションプロパティをロードせずに、行を多対多のテーブルに追加する

レビューをデータベースに追加する場合は、レビューオブジェクトを保存する前にユーザーオブジェクトとレストランオブジェクトを取得する必要があります。これは、次のコードで行われます。

public class Review 
{ 
    // Other properties... 
    public User User { get; set; } 
    public Restaurant Restaurant { get; set; } 
} 

そして、私のユーザーとレストランクラスの両方レビューのリストが含まれています。

// The 'review' object is the object coming as parameter. 
var restaurant = await _context.Restaurants.FindAsync(review.RestaurantId); 
var user = await _context.Users.FindAsync(review.UserId); 

var newReview = _context.Reviews.Add(new DataService.Entities.Review 
{ 
    // setting other values 
    Restaurant = restaurant, 
    User = user 
}).Entity; 

await _context.SaveChangesAsync(); 

Reviewクラスは、このようになります。

ナビゲーションプロパティとして設定するために両方のオブジェクトをロードしたくないので、これを行うより良い方法があると確信しています。私はちょうど方法を知らない。

私は.Netコア2.0とEntity Frameworkコアを使用しています。

答えて

2
public class Review 
{ 
    [Key] 
    public int ReviewId { get; set; } 

    // Other properties... 
    [ForeignKey("User")] 
    public int UserId{get; set;} 
    public User User { get; set; } 

    [ForeignKey("Restaurant ")] 
    public int RestaurantId {get; set;} 
    public Restaurant Restaurant { get; set; } 
} 

こうすることで、あなただけのユーザーID、およびRestaurantIdを設定することができ、あなたがユーザーをロードする必要はありませんかレストラン自ら

+0

これはほとんど間違いなく動作しますが、私はそれが流暢なAPIを使用しても可能ですかどうかを知りたいと思った:

あなたのサンプルケースでは、このようなものになるだろうか? – RandomStranger

1

私が正しく理解していれば、エンティティクラスReviewは参考ナビゲーションが含まれています明示的なFKプロパティを持たないプロパティ。

EF CoreはFKを表すShadow Propertiesを取得/設定できるため、尋ねていることを実行することは可能です(少し異例ですが)。

var entry = _context.Reviews.Add(new DataService.Entities.Review 
{ 
    // setting other values 
}); 
entry.Property("UserId").CurrentValue = review.UserId; 
entry.Property("RestaurantId").CurrentValue = review.RestaurantId; 

await _context.SaveChangesAsync(); 
関連する問題