I'm currently builiding an ASP .NET MVC application but I'm getting this error in my program. Not really sure what I did wrong.
This is my model: ProfileCreationContext
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.EntityFrameworkCore;
using System.IO;
using Microsoft.Data.SqlClient;
using System.Data;
namespace CRUD_Profile_Creation.Models
{
public class ProfileCreationContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var configuration = builder.Build();
optionsBuilder.UseSqlServer(configuration["ConnectionStrings:UserProfile"]);
}
SqlConnection con = new SqlConnection("Data Source=DESKTOP-HDBEK6R;Initial Catalog=Bottleneckv1;Integrated Security=True");
public DbSet<ProcessUnit> ProcessUnit { get; set; }
}
}
This is my other model:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;
namespace CRUD_Profile_Creation.Models
{
public class ProcessUnit
{
public string ProcessUnitID { get; set; }
public string ProcessUnitName { get; set;}
public int ProcessTypeID { get; set;}
public string InventoryName { get; set;}
public string CumM { get; set;}
public string PerdayM { get; set;}
public string TotalM { get; set; }
}
}
And this is my controller:
using CRUD_Profile_Creation.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CRUD_Profile_Creation.Controllers
{
public class ProcessUnitController : Controller
{
private ProfileCreationContext db = new ProfileCreationContext();
public IActionResult Index()
{
ViewBag.processUnitID = db.ProcessUnitID.ToList();
ViewBag.processUnitID = db.ProcessUnitName.ToList();
ViewBag.processUnitID = db.ProcessTypeID.ToList();
ViewBag.processUnitID = db.InventoryName.ToList();
ViewBag.processUnitID = db.CumM.ToList();
ViewBag.processUnitID = db.PerdayM.ToList();
ViewBag.processUnitID = db.TotalM.ToList();
return View();
}
}
}
This is the error I'm getting.
I'm still new in this framework. Im doing this based off my past personal projects
THE SOLUTION I DID
so basically, what I wanted was to list out all the items in the table. this is how I fixed it. I needed just to call that. Not sure why I started by listing all the variables. Hope this helps!
My controller:
public class DenoProfileController : Controller
{
private ProfileCreationContext db = new ProfileCreationContext();
public IActionResult Index()
{
ViewBag.denoprofile = db.DenoProfile.ToList();
return View();
}
}
Related
hello im trying to build a rest api with many to one relationship using code first. here is my two entities :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace RestApiAndForm.Models
{
public class Categorie
{
[Key]
public int id { get; set; }
[Required,MaxLength(60)]
public string nom { get; set; }
public ICollection<Produit> produits { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace RestApiAndForm.Models
{
public class Produit
{
[Key]
public int id { get; set; }
[Required,Index,MaxLength(60)]
public string libelle { get; set; }
public uint stock;
[Required]
public Categorie categorie { get; set; }
}
}
here is the context :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace RestApiAndForm.Models
{
public class bdTestContext : DbContext
{
public bdTestContext() : base("connTest") { }
public DbSet<Categorie> categories { get; set; }
public DbSet<Produit> produits { get; set; }
}
}
in my controller im using this code :
using RestApiAndForm.Models;
using RestApiAndForm.Models.Dto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace RestApiAndForm.Controllers
{
public class ProduitController : ApiController
{
private bdTestContext bd = new bdTestContext();
[HttpGet]
public List<Produit> GetProduits()
{
try
{
List<ProduitResponse> produitResponses = new List<ProduitResponse>();
List<Produit> produits = bd.produits.ToList();
return produits;
}
catch (Exception e)
{
return null;
}
}
i want to get the product and there categorie but the entity does not come with the categorie information even when im using produit.Find(id) , i cant have access to the categorie entity.
this is the result on postman (as you can see all categorie are set to null )
Postman result of the getProduits method
does anyone have the solution for that thank you
You should include them like the following :
List<Produit> produits = bd.produits.Include(p=> p.categorie).ToList();
Refer to : Eager loading
And don't forget to add
using System.Data.Entity; to your usings.
I started develop my project - web application with Database. I used WEB API with entity framework
I need CRUD operations realize in my project.
Read - work fine
But I don't know how realize Create, Update, Delete; I don't have enough experience and be glad yours advice.
I tried realize good architecture of my application - using repository pattern and fabric pattern. If you have advice in architecture of my project , I'll be grateful you.
I don't know how realize it in value controller and repository, could you help please?
Attach my code:
Repository
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebAPI
{
public class CustomerRepository
{
public IQueryable<Customer> GetAllCustomers()
{
DevelopersEntities dev = new DevelopersEntities();
return dev.Customers;
}
public IQueryable<Customer> GetAllCustomers(int id)
{
DevelopersEntities dev = new DevelopersEntities();
return dev.Customers.Where(c=>c.Id==id).Select(e=>e);
}
public IQueryable<Customer> DeleteCustomer(int id)
{
DevelopersEntities dev = new DevelopersEntities();
return dev.Customers.Remove(id);
}
public IQueryable<Customer> CreateCustomer()
{
DevelopersEntities dev = new DevelopersEntities();
}
public IQueryable<Customer> UpdateCustomer(int id)
{
DevelopersEntities dev = new DevelopersEntities();
}
}
}
Customer model
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WebAPI;
namespace DevelopersWeb.Models
{
public class CustomerModel
{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
public IEnumerable<HardwareModel> Hardware { get; set; }
public IEnumerable<SoftwareModel> Software { get; set; }
}
}
Harware Model
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace DevelopersWeb.Models
{
public class HardwareModel
{
public int HardwareId { get; set; }
public string HardwareName { get; set; }
}
}
Software Model
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace DevelopersWeb.Models
{
public class SoftwareModel
{
public int SoftwareId { get; set; }
public string SoftwareName { get; set; }
}
}
Model Factory
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WebAPI;
namespace DevelopersWeb.Models
{
public class ModelFactory
{
public CustomerModel Create(Customer customer)
{
return new CustomerModel()
{
CustomerId = customer.Id,
CustomerName = customer.Name,
Hardware = customer.HardWares.Select(h=>Create(h)),
Software = customer.Softwares.Select(c=>Create(c))
};
}
public HardwareModel Create(HardWare hardware)
{
return new HardwareModel()
{
HardwareId = hardware.HardWareId,
HardwareName = hardware.HardWareName,
};
}
public SoftwareModel Create(Software software)
{
return new SoftwareModel()
{
SoftwareId = software.SoftwareId,
SoftwareName = software.SoftwareName
};
}
}
}
Value Controller
using DevelopersWeb.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPI;
namespace DevelopersWeb.Controllers
{
public class ValuesController : ApiController
{
ModelFactory _modelFactory;
public ValuesController()
{
_modelFactory = new ModelFactory();
}
// GET api/values
public IEnumerable<CustomerModel> Get()
{
CustomerRepository cr = new CustomerRepository();
return cr.GetAllCustomers().ToList().Select(c=> _modelFactory.Create(c));
}
// GET api/values/5
public string Get(int id)
{
return "xxx";
}
// POST api/values
public void Post([FromBody]string value)
{
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}
}
}
Here is how you should save customer object:
public void CreateCustomer(Customer customer)
{
DevelopersEntities dev = new DevelopersEntities();
dev.Customers.Add(customer)
dev.SaveChanges();
}
Here is you api action:
// POST api/values
public void Post([FromBody]CustomerModel customerModel)
{
//Here you should transform CustomerModel object to customerEntity
CustomerRepository cr = new CustomerRepository();
cr.CreateCusomer(customer);
return Ok();
}
You should think about using Dependency Injection pattern here as well.
I want to create a route attribute in the Porosi controller, in the detaje method that takes as a DatePorosie (DatePorosie is the date) on parameter. The method must display from Porosi.cs class EmriPorosise, DatePorosie, TotaliPorosise according to the date that comes as a parameter in url. (sending date value either by form or by link). I hope I explained it well. Can you help me please???
This is Porosi.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MvcProjektDb.Models
{
public class Porosi
{
public int PorosiId { get; set; }
public string EmriPorosise { get; set; }
public DateTime DatePorosie { get; set; }
public int TotaliPorosise { get; set; }
public int? KlienteId { get; set; }
public virtual Kliente Kliente { get; set; }
}
}
This is PorosiController.cs but I don't know what to do here
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcProjektDb.Migrations;
using MvcProjektDb.Models;
namespace MvcProjektDb.Controllers
{
public class PorosiController : Controller
{
private ApplicationDbContext _db;
public PorosiController()
{
_db = new ApplicationDbContext();
}
protected override void Dispose(bool disposing)
{
_db.Dispose();
}
// GET: Porosi
public ActionResult Index()
{
return View();
}
[Route("Porosi/detaje/{dateporosie?}")]
public ActionResult detaje(DateTime? dateporosie)
{
var x = _db.porosi.Where(p => p.DatePorosie == dateporosie).ToList();
return View(x);
}
}
}
I have tried to fix this problem with my project for a while the getjokes returns null values and even though I don't have any errors. I am trying to make a app where there is just a simple joke shown. The api link is here APIlink.
This is the first time I have ever put anything on here so I'm probably doing it wrong but if anyone can help I will appreciate it
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace JokeApp.Classes
{
public class Main
{
[JsonProperty("category")]
public string Category { get; set; }
[JsonProperty("type")]
public string Type { get; set; }
[JsonProperty("setup")]
public string Setup { get; set; }
[JsonProperty("delivery")]
public string Delivery { get; set; }
[JsonProperty("id")]
public int Id { get; set; }
}
public class catagories
{
[JsonProperty("categories")]
public List<String> Categories { get; set; }
}
public class main
{
[JsonProperty("Main")]
public Main Main { get; set; }
[JsonProperty("categories")]
public string catogories { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using Windows.UI.Popups;
namespace JokeApp.Classes
{
class CardWrapper
{
public static async Task<Main> Getjokes()
{
Uri request = new Uri(#"https://sv443.net/jokeapi/category/any");
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("User_Agent" ,"JokeApp");
HttpResponseMessage respons = await client.GetAsync(request);
if (respons.IsSuccessStatusCode == false)
{
MessageDialog md = new MessageDialog("Cant find jokes!!");
await md.ShowAsync();
}
respons.EnsureSuccessStatusCode();
main mc = await respons.Content.ReadAsAsync<main>();
return mc.Main;
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using JokeApp.Classes;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using static JokeApp.Classes.Main;
// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace JokeApp
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page,INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public MainPage()
{
this.InitializeComponent();
Getjokes();
}
private Main _joke = new Main();
public Main Jokes
{
get { return _joke; }
set { _joke = value; NotifyPropertyChanged(); }
}
private async void Getjokes()
{
Jokes = await CardWrapper.Getjokes();
}
}
}
The response from sv443 looks like it would deserialize to an object of class Main, not of class main. So you probably want:
Main mc = await respons.Content.ReadAsAsync();
instead of
main mc = await respons.Content.ReadAsAsync();
In general, it's a bad idea to have two class definitions that differ only in capitalization, precisely because this type of problem can occur.
If that's not it, try logging your respons.Content as a string and see what's actually in there.
I'm trying Firestore with the nugget package Google.Cloud.Firestore
I followed this intro CRUD with firestore
Using the debugger I can see that the execution of the program stops when trying to call the method Query.GetSnapshotAsync()
I want to get just a list of documents from a collection.
Controller
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;
using System.Web.Http.Results;
using FirestoreAPI.Domain.Restaurants;
using FirestoreAPI.Repository.Restaurants;
using System.Threading.Tasks;
namespace FirestoreAPI.Controllers
{
[RoutePrefix("api")]
public class RestaurantsController : ApiController
{
public RestaurantsController() { }
[HttpGet]
[Route("restaurants")]
public IHttpActionResult GetAllRestaurants()
{
//var restAggregate = new RestaurantsAggregate();
var restaurantsRepo = new RestaurantsRepo();
return new NegotiatedContentResult<Task<List<Restaurant>>>(
HttpStatusCode.OK,
restaurantsRepo.GetAllRestaurants(),
this
); ;
}
}
}
DataLayer
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using Google.Cloud.Firestore;
namespace FirestoreAPI.Repository.Restaurants
{
public class RestaurantsRepo
{
//public FirestoreConn dbConn;
string projectId;
FirestoreDb firestoreDb;
public RestaurantsRepo()
{
//dbConn = new FirestoreConn();
string credentials = "C:\\Users\\ezequiel.lopez\\projects\\firestoredotnet\\FirestoreAPI\\firestoreapi-dca55-0be2f7d57f41.json";
Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", credentials);
projectId = "firestoreapi-dca55";
firestoreDb = FirestoreDb.Create(projectId);
}
public async Task<List<Restaurant>> GetAllRestaurants()
{
//FirestoreDb fsDB = dbConn.GetFSConnection();
//Query query = fsDB.Collection("restaurants").OrderByDescending("avgRating").Limit(50);
Query query = firestoreDb.Collection("restaurants").OrderByDescending("avgRating").Limit(50);
QuerySnapshot restSnaps = await query.GetSnapshotAsync();
List<Restaurant> restaurants = new List<Restaurant>();
return restSnaps.Documents
.Where<DocumentSnapshot>(ds => ds.Exists)
.Select(ds => ds.ConvertTo<Restaurant>()).ToList();
}
}
}
Restaurant
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Google.Cloud.Firestore;
namespace FirestoreAPI.Repository.Restaurants
{
[FirestoreData]
public class Restaurant
{
[FirestoreProperty]
public decimal avgRating { get; set; }
[FirestoreProperty]
public string category { get; set; }
[FirestoreProperty]
public string city { get; set; }
[FirestoreProperty]
public string name { get; set; }
[FirestoreProperty]
public int numRatings { get; set; }
[FirestoreProperty]
public int price { get; set; }
}
}
I was having the same issue. Thing is, I was calling an async method from a synchronous one. It didn't work until I've made my caller method async and awaited for it.