Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 26
1

Создание информации о пользователе с использованием Entity Framework

29.02.2016, 13:04. Показов 904. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,я только начинаю изучать asp.net. У меня вопрос как реализовать добавление данных на страницу, если используется связь "многие-ко-многим", чтобы можно было сразу добавлять информацию о владельце и машине.Как должен выглядеть метод контроллера и странички Create.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class Owner
     {
    public int OwnerID { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public DateTime Birthday { get; set; }
    public int Experience { get; set; }
    public virtual ICollection<Car> Cars { get; set; }
    public Owner()
    {
        Cars = new List<Car>();
    }
}
public class Car
{
    public int CarID { get; set; }
    public string Model { get; set; }
    public string Mark { get; set; }
    public string Type { get; set; }
    public int Price { get; set; }
    public string YearofRelease { get; set; }
    public virtual ICollection<Owner> Owners { get; set; }
    public Car()
    {
        Owners = new List<Owner>();
    }
}
public class CarOwnersContext:DbContext
{
    public CarOwnersContext(): base("CarOwnersContext")
    { }
   public DbSet<Car> Cars { get; set; }
   public DbSet<Owner> Owners { get; set; }
   protected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
       modelBuilder.Entity<Owner>().HasMany(c => c.Cars)
       .WithMany(s => s.Owners)
       .Map(t => t.MapLeftKey("OwnerID")
       .MapRightKey("CarID")
       .ToTable("OwnerCar"));
   }
}
  public class CarOwnerInit : DropCreateDatabaseIfModelChanges<CarOwnersContext>
    {
        protected override void Seed(CarOwnersContext context)
        {
 
 
       Owner ow1= new Owner {Name="Sam", OwnerID=1, Surname="Lucky", Birthday=DateTime.Parse("1993-06-21"), Experience=3};
       Owner ow2 = new Owner { Name = "Nick", Surname = "May", Birthday = DateTime.Parse("1994-04-06"), Experience = 5 };
 
 
 
       context.Owners.Add(ow1);
       context.Owners.Add(ow2);
            context.SaveChanges();
 
 
            Car ca1 = new Car { Model = "Alfa 146", CarID = 2, Mark = "Alfa", Type = "passenger", Price = 7, YearofRelease = "2001", Owners = new List<Owner>() { ow1, ow2 } };
            Car ca2 = new Car { Model = "Bentley 126", CarID = 4, Mark = "Bentley", Type = "passenger", Price = 77, YearofRelease = "2011", Owners = new List<Owner>() { ow2 } };
 
context.Cars.Add(ca1);
context.Cars.Add(ca2);
 
 
            context.SaveChanges();
            base.Seed(context);
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.02.2016, 13:04
Ответы с готовыми решениями:

Создание поискового запроса к базе данных с использованием Entity Framework
Не могу составить поисковый запрос к базе данных используя Entity Framework. Сложность в том, что...

Ошибка создания базы с использованием Entity Framework
Приветствую! Первый день осваиваюсь с Entity Framework, все шло радостно, пока не встретился с...

Выборка и представление данных использованием Entity Framework 6
Здравствуйте уважаемые гуру. Начал изучать Entity Framework. Создал такой модель. class...

В чем разница между Entity Framework и Entity Framework Core?
В чем разница (если она есть) между entity framework и entity framework core?

11
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
29.02.2016, 13:31 2
public void Create ([FromBody]Car Car) { ... }
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 26
29.02.2016, 13:35  [ТС] 3
Вот мой код для Create
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        public ActionResult Create()
        {
            return View();
        }
 
        
       
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "OwnerID,Name,Surname,Birthday,Experience")] Owner owner)
        {
            if (ModelState.IsValid)
            {
                db.Owners.Add(owner);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
 
            return View(owner);
        }
Мне нужно в нем поменять параметры я правильно понимаю?
0
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
29.02.2016, 13:35 4
Это зависит как и в каком формате Вы передаете данные с клиента , можно например передавать JSON обьект как в примере ниже , тогда сработает мой вариант интерфейса контроллера.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
export class CarOwnersService
    {
        private httpService: ng.IHttpService;
        private qService: ng.IQService;
 
        static $inject = ['$http', '$q'];
 
        constructor($http: ng.IHttpService, $q: ng.IQService)
        {
            this.httpService = $http;
            this.qService = $q;
        }
 
        public Create(Car: Namespace.Data.Car)
        {
            var deferred = this.qService.defer();
            this.httpService.post("/api/CarOwnerService/Create", Car).then(
                function (result: any) { deferred.resolve(result.data); },
                function (error) { deferred.reject(error); });
 
            return deferred.promise;
        }
    }
Тут передается машина со списком владельцев , в Вашем примере Вы решили передавать владельца со списком его машин , но в целом без разницы.
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 26
29.02.2016, 13:43  [ТС] 5
А можно это сделать без javascript?

Добавлено через 5 минут
sau, Я не знаю в каком формате они передаются с клиента. Я просто хотела реализовать CRUD функционал для 2 классов выше. И хотела бы, чтобы при добавлении нового пользователя в базу можно было указывать не только данные о пользователе(имя, фамилия), а еще и данные о машине(модель, марка). Нигде не могу найти примера такой реализации есть только добавление одних сведений, то есть только данных о пользователе.
0
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
29.02.2016, 13:45 6
Ну , данные , при передачи с помощью формы , имеют плоский формат: параметр-значение , - если у вас сложная структура иерархических данных , то это весьма не удобно.
Да и к тому же , вряд ли Вы обойдетесь без модели на стороне клиента и без javascript при динамическом построении формы для такой структуры. - если хотите отправить все данные за один раз.
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 26
29.02.2016, 13:54  [ТС] 7
Вот код View для Create
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
@model Site.Models.Owner
 
 
@{
    ViewBag.Title = "Create";
}
 
<h2>Create</h2>
 
 
@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>Owner</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
            </div>
        </div>
 
        <div class="form-group">
            @Html.LabelFor(model => model.Surname, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Surname, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Surname, "", new { @class = "text-danger" })
            </div>
        </div>
 
        <div class="form-group">
            @Html.LabelFor(model => model.Birthday, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Birthday, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Birthday, "", new { @class = "text-danger" })
            </div>
        </div>
 
        <div class="form-group">
            @Html.LabelFor(model => model.Experience, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Experience, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Experience, "", new { @class = "text-danger" })
            </div>
        </div>
        
            
        
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}
 
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
 
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
Что нужно дописать, чтобы были поля ввода такие как марка, модель?

Добавлено через 6 минут
sau, то есть лучше будет, если я свой код для Create заменю Вашим?Я только начинаю изучать asp.net и еще толком не понимаю, что к чему. Что мне нужно дописать во View для того, чтобы можно было вводить марку машины?
0
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
29.02.2016, 13:57 8
Думаю что это будет сложно Вам ) , если делать по простому , то просто добавьте еще пару полей марка-модель в разметку по аналогии с другими полями , а интерфейс функции сервиса переделайте на плоский:
C#
1
2
3
4
5
6
7
public void Create (string Name, string Surname, ... , string Mark, string Model...) 
{ 
   ... 
   var owner = new Owner(Name,Surname...);
   owner.Cars.Add(new Cart(Mark,Model...));
   ...
}
Правда , таким макаром много машин не передать... , но и с другой стороны , Вы все равно динамически поля не формируете.
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 26
29.02.2016, 13:59  [ТС] 9
sau, Нужно же учиться сложному)хотя бы понять принцип. А нельзя вот здесь
C#
1
public ActionResult Create([Bind(Include = "OwnerID,Name,Surname,Birthday,Experience")] Owner owner)
добавить еще один аргумент сделать с Bind только для полей Mark, Model?А потом просто объект Car добавить в коллекцию Owner?
0
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
29.02.2016, 14:13 10
Цитата Сообщение от ksu_21_02 Посмотреть сообщение
sau, Нужно же учиться сложному)хотя бы понять принцип.
Ну принцип я описал , создаете на стороне клиента модель данных (javascript обьекты) , реализуете функционал по взаимодействию с ними (с помощью того или иного js фреймворка) , можно например через двунаправленный биндинг , далее , в клиентскую модель Owner_а , с помощью того же javascript-а , добавляете машины , все это отражается на интерфейсе и т.п. После чего , при сохранении , данная модель сериализуется в тот или иной формат (например в JSON) и отправляется на сервер. , где ее принимает функция контроллера уже в виде полноценного обьекта со всеми заполненными полями.

Добавлено через 2 минуты
Цитата Сообщение от ksu_21_02 Посмотреть сообщение
добавить еще один аргумент сделать с Bind только для полей Mark, Model?А потом просто объект Car добавить в коллекцию Owner?
C#
1
2
3
public ActionResult Create(
[Bind(Include = "OwnerID,Name,Surname,Birthday,Experience")] Owner owner,
[Bind(Include = "Mark,Model")] Car car)
Но так только одна машинка добавится. , да и сути это не меняет , что string-и на входе , что так.
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 26
29.02.2016, 14:22  [ТС] 11
sau, Сначала попробую с одной машинкой, а потом почитаю о js фреймворках, потому что представления о js очень поверхностные. Я добавлю этот код в Create, а во View как писать наподобие этого?
HTML5
1
2
3
4
5
6
7
<div class="form-group">
            @Html.LabelFor(model => model.Experience, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Experience, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Experience, "", new { @class = "text-danger" })
            </div>
        </div>
0
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
29.02.2016, 14:25 12
P/S И я не уверен на счет привязки сразу к двум параметрам , если не выйдет , то придется делать класс обертку вида OwnerCar в который запихнуть все нужные поля - что уже само по себе криво , делать целый класс только ради биндинга.

Добавлено через 1 минуту
Цитата Сообщение от ksu_21_02 Посмотреть сообщение
а во View как писать наподобие этого?
угу ). , по моему , на данном этапе , Вам проще почитать уроки mvc , чем тут на форуме вопросы задавать , ибо слишком мало знаний , что бы как то емко на них ответить не вызывая новых вопросов и не превращая ответ в полноценную статью.
0
29.02.2016, 14:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.02.2016, 14:25
Помогаю со студенческими работами здесь

Удалить запись из базы данных с использованием Entity Framework
Я использую Entity Framework. Я хотел бы удалить запись основанную на primary key, но я не хочу...

Ошибка при подключении к mssql с использованием entity framework
Пытаюсь подключиться к ДБ и создать на основе содержимого таблицы &quot;products&quot; заполнить контейнер...

Entity framework: создание сводной таблицы
Доброго всем времени суток. Работаю с EF и столкнулся с проблемой: нужно вывести данные из...

Создание моделей данных, Entity Framework Code First
Доброго времени суток! Столкнулся с трудностью в процессе освоения. Имеются две сущности: пусть,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru