The navigation property is not a declared property on type Verify that it has not been explicitly excluded from the model and that it is a valid

342
15 января 2018, 06:27

Не могу понять что не так!?

class UserContext: DbContext
{
        public UserContext() : base("DBConnection") { }
        public DbSet<Question> Questions { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<Question>().HasMany(p => p.Towns);
        }
 }
class Question
    {
        public int Id { get; set; }
        public virtual ICollection<string> Towns { get; set; }
        public Question()
        {
            Towns = new List<string>();
        }
    }
class Program
    {
        static void Main(string[] args)
        {
                using (UserContext db = new UserContext())
                {
                    var q1 = new Question();
                    for (int i = 0; i < 4; i++)
                        {
                            Console.Write($"Town {i+1}: ");
                            q1.Towns.Add(Console.ReadLine());
                        }
                    db.Set<Question>().Add(q1);
                    db.SaveChanges();
                }
    }
Answer 1

Вы пытаете использовать в качестве свойства навигации просто тип string потому EF и ругается что свойство не декларировано. Для решения данной задачи логичным и правильным с точки зрения архитектуры будет создать отдельный тип для городов и уже работать с ним как с отдельно таблицей.

Пример на основе вашего кода:

namespace Question770117
{
    using System;
    using System.Data.Entity;
    using System.Linq;
    public class UserContext : DbContext
    {
        public DbSet<Question> Questions { get; set; }
        public UserContext() : base("name=UserContext")
        {
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<Question>().HasMany(p => p.Towns);
        }
    }
    public class Question
    {
        public int Id { get; set; }
        public virtual ICollection<Town> Towns { get; set; }
        public Question()
        {
            Towns = new List<Town>();
        }
    }
    public class Town
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

И пример использования:

static void Main(string[] args)
{
    using (UserContext db = new UserContext())
    {
        var q1 = new Question();
        for (int i = 0; i < 4; i++)
        {
            Console.Write($"Town {i + 1}: ");
            q1.Towns.Add(new Town(){Name = Console.ReadLine() });
        }
        db.Questions.Add(q1);
        db.SaveChanges();
    }
    ReadAllTowns();
}
/// <summary>
/// Пример считывания городов из БД
/// </summary>
private static void ReadAllTowns()
{
    Console.Write(Environment.NewLine);
    using (UserContext db = new UserContext())
    {
        var questions = db.Questions.ToList();
        foreach (var question in questions)
        {
            Console.Write($"Question {question.Id}:{Environment.NewLine}");
            foreach (var town in question.Towns)
            {
                Console.Write($"\tTown {town.Id}: {town.Name}{Environment.NewLine}");
            }
        }
    }
    Console.ReadKey();
}

Ну и напоследок скрин:

READ ALSO
Нужно при нажатии на боковые кнопки мыши производились функции копи паст, вместо &ldquo;назад&rdquo; и &ldquo;вперед&rdquo; соответственно. Глобально!

Нужно при нажатии на боковые кнопки мыши производились функции копи паст, вместо “назад” и “вперед” соответственно. Глобально!

Реализован глобальный хук и назначение функций на клавиши, нужно отменять действие "назад" и "вперед"

224
MS SQL SERVER связь многие ко многим

MS SQL SERVER связь многие ко многим

Вопрос следующийЕсть 2 таблицы: МАРШРУТ: Достопримечательность:

220
Привет мир на C#

Привет мир на C#

ЗдравствуйтеМне необходимо объединить в функции текст и переменную

190
Помогите разобраться с Charles

Помогите разобраться с Charles

Не могу разобраться как изменять IP в запросах в чарльзеПопробую объяснить - есть софт на C# использую dotnetbrowser

222