1

新しい画像をアップロードしてプロファイルにリンクするたびに、間違ったデータベースに新しいプロファイルが作成されます。

私はそれがこのコードを介して作成されていると想像します:

var imageMeta = new ImageMeta
    {
        Name = imageForm.Name,
        User = Profile,
    };
...
db.Images.Add(imageMeta);
db.SaveChanges();

私からどこProfileから来たのかBaseController

public class BaseController : Controller
{
    private UsersContext _udb = new UsersContext();
    private UserProfile _profile = null;

    public new UserProfile Profile
    {
        get
        {
            if(_profile == null && User.Identity.IsAuthenticated)
            {
                _profile = _udb.UserProfiles.Single(p => p.UserName == User.Identity.Name);
            }
            return _profile;
        }
    }
}

そのメソッドはProfile.get、ログインしたユーザーの正しいプロファイルをからプルしますUsersContextdb、最初のスニペットのは実際にはGalleryContextです。

そのデータベース/コンテキストにプロファイルが表示されないので、テーブルを作成して新しいレコードを挿入していると思いますか?そうしないように言ってもいいですか?ユーザーと画像は、2つの異なるデータベースに保存されるだけです。

それらを同じデータベースに入れてもかまいませんが、画像にDefaultContextを使用するのは好きではないようです

4

1 に答える 1

2

ImageMetaUserProfileが2つの別々のデータベースに属している場合、選択肢はほとんどありません。

UserProfileクラスにtypeUserプロパティを含める代わりにImageMeta、スカラープロパティを指定できますUserId

public class ImageMeta
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public int UserId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<ImageFile> Files { get; set; } 
}

次に、ImageMeta挿入は次のようになります

var imageMeta = new ImageMeta
    {
        Name = imageForm.Name,
        UserId = Profile.Id,
    };
...
db.Images.Add(imageMeta);
db.SaveChanges();

UserProfileデータベース上で のマテリアライズドビューを作成できGalleryContextます。次に、両方のコンテキストが同じテーブルを使用します。その後、Profileインスタンスをデタッチして、保存時にUsersContextアタッチできます。GalleryContextImageMeta

于 2012-09-05T03:49:18.067 に答える