Как связать базу данных Asp.Nets с моим собственным контекстом? - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь создать приложение в Mvc с индивидуальными учетными записями пользователей и пытаюсь связать автоматически сгенерированную базу данных с моим собственным контекстом. Проблема, возникающая при попытке создать представление моего метода Create, вызывает следующее сообщение об ошибке:

Произошла ошибка при запуске выбранного генератора кода: «Невозможно Получить метаданные для 'Projekt_Dejtingsida.Models.Messages' не действительный. Свойство навигации ApplicationUser не найдено в зависимый тип 'Projekt_Dejtsida.Models.Messages'. Значение имени должно быть допустимым именем свойства навигации.

Пожалуйста, помогите новичку!

Вот модели, которые я использую:

Я уже попробовал метод protected override void OnModelCreating(DbModelBuilder modelBuilder), но он не работал ...

public class Messages {
    [Key, ForeignKey("ApplicationUser")]
    public string Id { get; set; }
    [Key]
    public int MessageId { get; set; }
    public virtual ApplicationUser Sender { get; set; }
    public virtual ApplicationUser Receiver { get; set; }
    [Required(AllowEmptyStrings = false, ErrorMessage = "You can't send a message without a content")]
    [StringLength(300, MinimumLength = 3, ErrorMessage = "Your message should be between 3 and 300 characters")]
    public string MessageContent { get; set; }
} 

public class FriendRequests {
    public string UserId { get; set; }
    [Key]
    public int RequestId { get; set; }
    public virtual ApplicationUser RequestTo { get; set; }
    public virtual ApplicationUser RequestFrom { get; set; }
    public bool Confirmed { get; set; }
}

public class Profile {
    [Key]
    public string UserId { get; set; }
    public byte[] ProfilePicture { get; set; }
    public string Firstname { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }
    public string City { get; set; }
    public string About { get; set; }
    public virtual ICollection<Messages> MyMessages { get; set; }

}

Вот DbContext:

public class DatesiteContext : DbContext {

    public DatesiteContext() : base() { }       

    public DbSet<FriendRequests> Requests { get; set; }
    public DbSet<Messages> Messages { get; set; }
    public DbSet<Profile> Profiles { get; set; }
}

Вот MessageController

[Authorize]
public class MessageController : Controller
{
    // GET: Message
    public ActionResult Index() 
    {
        var db = new DatesiteContext();
        var userId = User.Identity.GetUserId();
        var msgs = db.Messages.FirstOrDefault(m => m.Id == userId);

        return View(new MessageViewModel {
            Sender = msgs.Sender,
            Receiver = msgs.Receiver,
            MessageContent = msgs.MessageContent
        });
    }

    public ActionResult Create(MessageViewModel model) {
        DatesiteContext db = new DatesiteContext();

        var userId = User.Identity.GetUserId();
        var msgs = db.Messages.FirstOrDefault(m => m.Id == userId);

        if (msgs == null) {
            db.Messages.Add(new Messages {
                Id = userId,
                Sender = msgs.Sender,
                Receiver = msgs.Receiver,
                MessageContent = msgs.MessageContent
            });
        } else {
            msgs.Sender = model.Sender;
            msgs.Receiver = model.Receiver;
            msgs.MessageContent = model.MessageContent;
        }

        db.SaveChanges();

        return RedirectToAction("Index", "Profile");

    }
}
...