I have these entities:
public class Project : Base
{
public string Name { get; set; }
public string Description { get; set; }
public DateTime StartDate { get; set; }
public DateTime? EndDate { get; set; }
public ProjectStatus CurrentStatus { get; set; } = ProjectStatus.New;
public List<StatusHistory>? StatusHistories { get; set; }
public Team? Team { get; set; }
public int? TeamId { get; set; }
// public ProgressTrackerValue trackerValue { get; set; }
public List<AttachedFile> AttachedFiles { get; set; }
}
public class Task : Base
{
public string Name { get; set; }
public string Description { get; set; }
public DateTime? EstimatedDueDate { get; set; }
public DateTime? ActualDueDate { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; } // ?? End DATE same as ActualDueDate
public TaskStatus CurrentStatus { get; set; } = TaskStatus.Draft;
public int ProjectId { get; set; }
public Project Project { get; set; }
public List<StatusHistory> StatusHistories { get; set; }
public TaskType TaskType { get; set; }
public TaskPriority Priority { get; set; }
public float ? DurationProgress { get; set; }
public List<AttachedFile> AttachedFiles { get; set; }
}
public class Team : Base
{
public string TeamLeaderId { get; set; }
public List<TeamMember>? TeamMembers { get; set; }
public virtual Project Project { get; set; }
}
public class AttachedFile : Base
{
public string OriginalFileName { get; set; }
public string FileName { get; set; }
public string MimeType { get; set; }
public string FileType { get; set; }
public string OwnerType { get; set; }
public int OwnerId {get; set;}
public string FilePath { get; set; }
public long FileSize { get; set; }
}
public class Comment : Base
{
public string Content { get; set; }
public int? ParentCommentId { get; set; }
public List<Comment>? Replies { get; private set; }
public Task Task { get; set; }
public int taskId { get; set; }
public List<AttachedFile>? AttachedFiles { get; set; }
}
public class StatusHistory : Base
{
public string OwnerType { get; set; }
public int OwnerId {get; set;}
public string State { get; set; }
}
public class TaskEmployee : Base
{
public int TaskId { get; set; }
public Task Task { get; set; }
public string EmployeeId { get; set; }
}
public class TeamMember : Base
{
public string UserId { get; set; }
}
What can I do to improve the above entities? Any suggestions.
Also there is UserId,EmployeeId,TeamLeaderId.... all of these supposed to be FK to IdentityUser but this project is isolated from Identity and i can't find a way to link them together. if there is a suggestion on how could I make such relationship in EFCore. (I could make relationship manually but I can't put navigation properties for Identity inside these entities thus not benefiting from EFCore).
Finally there is OwnerType, OwnerId, for example in the AttachedFile entity the attached file could be related to Project, Task, Comment. So I will store the type and id for them in these fields, the problem however that I will not benefit form EF Core functionality this way. For example: I must write SQL manually for every query.
currently the schema look like this:
enter image description here
I have launched my website in beta-version. The next version should contain a shopping cart and a checkout with the credit card. On my way to making this shopping cart, I've discovered that my old Product-class with several different prices simply doesn't work. I need one price with one identity or a subclass with several prices mapped to the original class(which I will use) :
public class Product
{
[Key]
public int ProductID { get; set; }
[Required(ErrorMessage = "Please enter an product name")]
public string Name { get; set; }
[Required(ErrorMessage = "Please specify a category")]
public string Category { get; set; }
public string SubCategory { get; set; }
public string Description { get; set; }
public decimal Price16 { get; set; }
public decimal Price12 { get; set; }
public decimal Price8 { get; set; }
public decimal Price4 { get; set; }
public decimal PriceEach { get; set; }
public decimal PriceKg { get; set; }
public string ProductImageSmallUrl { get; set; }
public string ProductImageSmallAlternativeDescription { get; set; }
public string ProductImageSmallContentType { get; set; }
public string ProductImageLargeUrl { get; set; }
public string ProductImageLargeAlternativeDescription { get; set; }
public string ProductImageLargeContentType { get; set; }
public string ProductImageLargeSecondUrl { get; set; }
public string ProductImageLargeSecondAlternativeDescription { get;
set; }
public string ProductImageLargeSecondContentType { get; set; }
}
I have after, a lot of research constructed two classes:
public class Product
{
public Product(ICollection<Price> prices)
{
Prices = prices;
}
[Key]
public int ProductID { get; set; }
[Required(ErrorMessage = "Please enter an product name")]
public string Name { get; set; }
[Required(ErrorMessage = "Please specify a category")]
public string Category { get; set; }
public string SubCategory { get; set; }
public string Description { get; set; }
public string ProductImageSmallUrl { get; set; }
public string ProductImageSmallAlternativeDescription { get; set; }
public string ProductImageSmallContentType { get; set; }
public string ProductImageLargeUrl { get; set; }
public string ProductImageLargeAlternativeDescription { get; set; }
public string ProductImageLargeContentType { get; set; }
public string ProductImageLargeSecondUrl { get; set; }
public string ProductImageLargeSecondAlternativeDescription { get;
set; }
public string ProductImageLargeSecondContentType { get; set; }
public ICollection<Price> Prices { get; set; }
}
And a price class:
public class Price
{
[Key]
public int ID { get; set; }
public int CurrentProductID { get; set; }
public string Size { get; set; }
public decimal Value { get; set; }
public Product CurrentProduct { get; set; }
}
I have this DbContext:
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<MokaMokkaDbContext>
options)
:base(options) {}
public DbSet<Product> Products { get; set; }
public DbSet<Price> Prices { get; set; }
protected override void OnModelCreating (ModelBuilder modelBuilder)
{
modelBuilder.Entity<Price>()
.HasOne(p => p.CurrentProduct)
.WithMany(b => b.Prices)
.HasForeignKey(p => p.CurrentProductID);
}
}
I am trying to write a seeding class:
public class SeedData
{
public static EnsurePopulated(IApplicationBuilder app)
{
MokaMokkaDbContext context = app.ApplicationServices
.GetRequiredService<MokaMokkaDbContext>();
context.Database.Migrate();
if(!context.Products.Any())
{
context.Products.AddRange(
new Product
{
Name = "Dobos cake",
Category = "Cake",
ProductImageSmallUrl = "Dobos.Torta.jpg",
ProductImageSmallContentType = "jpg",
Prices = new List<Price>()
});
}
}
But I get the following problem in over the red underline of the Product I am trying to create: "There is no argument given that corresponds to the required formal parameter "prices" of Product.Product(ICollection)".
I believe you need parameterless constructor in your Product class.
I have a web API which return the JSON when called. The problem is it returns array of JSON having multiple object. I need to parse it for my class to create a grid.
You can check my api here.
I'm getting following error while parsing it
Blockquote
"Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'OpsArc.Models.OnBoardingDetailsWithResourceDTO' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.
Path '', line 1, position 1.'"
You can use this website (JSON2CSharp) to translate your json output into their respective classes. You'll get the following output
public class ThisResource
{
public string id { get; set; }
public object empRec { get; set; }
public int createdBy { get; set; }
public object payrollId { get; set; }
public int resourceTypeID { get; set; }
public string resourceTypeValue { get; set; }
public string resourceTypeStoredValue { get; set; }
public string ssn { get; set; }
public string lastName { get; set; }
public string middleName { get; set; }
public string firstName { get; set; }
public string localEmployeeId { get; set; }
public int resourceStatusId { get; set; }
public object resourceStatusValue { get; set; }
public object resourceStatusStoredValue { get; set; }
public object vendorId { get; set; }
public object alertRec { get; set; }
public object alertNote { get; set; }
public object divRec { get; set; }
public object repRec { get; set; }
public object hold { get; set; }
public object holdNote { get; set; }
public object cdid { get; set; }
public object shortNotes { get; set; }
public object doNotPlace { get; set; }
public object modifiedBy { get; set; }
public object lastModifiedOn { get; set; }
public DateTime ts { get; set; }
}
public class ThisBoardingDetails
{
public string id { get; set; }
public string resourceOnboardingID { get; set; }
public int desiredResourceTypeID { get; set; }
public int offerExpires { get; set; }
public object desiredResourceTypeValue { get; set; }
public object desiredResourceTypeStoredValue { get; set; }
public string jobOrderID { get; set; }
public string backgroundCheckID { get; set; }
public int emailID { get; set; }
public string requestDate { get; set; }
public object onboardingRequest { get; set; }
public int onboardingStatusCode { get; set; }
public string resourceID { get; set; }
}
public class RootObject
{
public ThisResource thisResource { get; set; }
public ThisBoardingDetails thisBoardingDetails { get; set; }
}
You will need to fix a few things, but it's a good enough resource to give you a start.
I've similar questions that refer to this annotation to solve their problem:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
However, applying this to my relevant Entity Model does nothing.
When I call the .Add() method, it inserts the GUID as 00000000-0000-0000-0000-000000000000.
As you can see, the annotation I mentioned is present in the model:
using System;
using System.Collections.Generic;
public partial class Event
{
[System.ComponentModel.DataAnnotations.Schema.DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
public System.Guid ID { get; set; }
public int AccountID { get; set; }
public string ExternalID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Location { get; set; }
public Nullable<System.DateTime> StartTime { get; set; }
public Nullable<System.DateTime> EndTime { get; set; }
public Nullable<bool> AllDay { get; set; }
public Nullable<System.Guid> ImageData { get; set; }
public string ImageUrl { get; set; }
public virtual Account Account { get; set; }
public virtual FetchedFile FetchedFile { get; set; }
}
How can I generate a unique GUID upon inserting a new Entity Object?
You can always initialize the Guid in a constructor.
public partial class Event
{
public Event()
{
ID = Guid.NewGuid();
}
public System.Guid ID { get; set; }
public int AccountID { get; set; }
public string ExternalID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Location { get; set; }
public Nullable<System.DateTime> StartTime { get; set; }
public Nullable<System.DateTime> EndTime { get; set; }
public Nullable<bool> AllDay { get; set; }
public Nullable<System.Guid> ImageData { get; set; }
public string ImageUrl { get; set; }
public virtual Account Account { get; set; }
public virtual FetchedFile FetchedFile { get; set; }
}
I have this class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace BusinessApplication3.Web
{
public class Query2
{
public Int32? IDENTETE_BL { get; set; }
public String NO_BL { get; set; }
public DateTime? DATE_BL { get; set; }
public String FAC_AVOIR { get; set; }
public String REF_BL { get; set; }
public String CODE_CLIENT { get; set; }
public String NOM_CLIENT { get; set; }
public String ADRESSE { get; set; }
public String CODE_PAYS { get; set; }
public String VILLE { get; set; }
public String CODE_POSTAL { get; set; }
public String ZONE { get; set; }
public String TEL_FAX { get; set; }
public String CODE_ADL { get; set; }
public String NOM_ADL { get; set; }
public String ADRESSE_ADL { get; set; }
public String CODE_POSTAL_ADL { get; set; }
public String VILLE_ADL { get; set; }
public Decimal? MT_TTC_BL { get; set; }
public String CODE_PAYS_ADL { get; set; }
public String TEL_FAX_ADL { get; set; }
public Decimal? REM { get; set; }
public String CODE_REGLEMENT { get; set; }
public String NO_FACTURE { get; set; }
public DateTime? DATE_FACTURE { get; set; }
public String CODE_COMPTA { get; set; }
public String SITE { get; set; }
public String CODE_COMMERCIAL { get; set; }
public Int32? NBR_COLIS { get; set; }
public String NOM_TRANSPORTEUR { get; set; }
public String FACTURE_DIRECTE { get; set; }
public String MOIS_FACTURE { get; set; }
public String CLE_SITE_MOIS_FAC { get; set; }
public String CLE_SITE_FD_CC { get; set; }
public String CLE_SITE_FD { get; set; }
public String CLE_SITE_FD_CC_EDIT { get; set; }
public String ARCHIVAGE { get; set; }
public String NO_TVA_CL { get; set; }
public String numero { get; set; }
public String Bis { get; set; }
public String voie { get; set; }
public String P_identite { get; set; }
public String p_numero { get; set; }
public DateTime? p_du { get; set; }
public String p_par { get; set; }
public DateTime? nais_du { get; set; }
public String nais_ville { get; set; }
public String nais_dep { get; set; }
public String nais_pays { get; set; }
public String num_siren { get; set; }
public Int64? id_bon_ademe { get; set; }
public Decimal? poids_ademe_vhu { get; set; }
public String CODE_BROYEUR { get; set; }
public Int32 IDLIGNES_BL { get; set; }
public String CODE_CLIENT_LI { get; set; }
public String NO_BL_LI { get; set; }
public DateTime? DATE_BL_LI { get; set; }
public String FAC_AVOIR_LI { get; set; }
public String CODE_ARTICLE { get; set; }
public String NO_VEHICULE { get; set; }
public String DESIGNATION { get; set; }
public Decimal? QTE { get; set; }
public Decimal? PU_HT { get; set; }
public Decimal? REM_LI { get; set; }
public String CODE_TVA { get; set; }
public Single? TAUX_TVA { get; set; }
[Key]
public String NO_LIGNE { get; set; }
public String TYPE_ARTICLE { get; set; }
public String LIB_LIBRE { get; set; }
public String DESI_ARTICLE { get; set; }
public String CODE_GARANTIE { get; set; }
public String NO_FACTURE_LI { get; set; }
public String CODE_REGLEMENT_LI { get; set; }
public String SITE_LI { get; set; }
public String LIB_MODELE { get; set; }
public Decimal? PA_HT_TTC { get; set; }
public Decimal? PU_NET { get; set; }
public Decimal? PU_TTC { get; set; }
public Int64? code_id_article { get; set; }
public String site_stockage { get; set; }
public Byte? sans_trait_haut { get; set; }
public String nom_article_unique_demonter { get; set; }
public Int64? code_ademe_ligne { get; set; }
public Decimal? poids_ademe { get; set; }
public String type_article_ademe { get; set; }
public String consistance { get; set; }
public String conditionnement { get; set; }
public Int64? nombre_carcasse { get; set; }
public Int64? num_vehicule_entretien { get; set; }
public String num_immat_vehi_entretien { get; set; }
}
}
and this function in my domainservice
public IQueryable<Query2> Getligne_req()
{
return from t in ObjectContext.lignes_bl
from t0 in ObjectContext.entete_bl
where
t.NO_BL == t0.NO_BL
orderby
t.NO_BL,
t.NO_LIGNE
select new Query2()
{
IDENTETE_BL = t0.IDENTETE_BL,
NO_BL = t0.NO_BL,
DATE_BL = t0.DATE_BL,
FAC_AVOIR = t0.FAC_AVOIR,
REF_BL = t0.REF_BL,
CODE_CLIENT = t0.CODE_CLIENT,
NOM_CLIENT = t0.NOM_CLIENT,
ADRESSE = t0.ADRESSE,
CODE_PAYS = t0.CODE_PAYS,
VILLE = t0.VILLE,
CODE_POSTAL = t0.CODE_POSTAL,
ZONE = t0.ZONE,
TEL_FAX = t0.TEL_FAX,
CODE_ADL = t0.CODE_ADL,
NOM_ADL = t0.NOM_ADL,
ADRESSE_ADL = t0.ADRESSE_ADL,
CODE_POSTAL_ADL = t0.CODE_POSTAL_ADL,
VILLE_ADL = t0.VILLE_ADL,
MT_TTC_BL = t0.MT_TTC_BL,
CODE_PAYS_ADL = t0.CODE_PAYS_ADL,
TEL_FAX_ADL = t0.TEL_FAX_ADL,
REM = t0.REM,
CODE_REGLEMENT = t0.CODE_REGLEMENT,
NO_FACTURE = t0.NO_FACTURE,
DATE_FACTURE = t0.DATE_FACTURE,
CODE_COMPTA = t0.CODE_COMPTA,
SITE = t0.SITE,
CODE_COMMERCIAL = t0.CODE_COMMERCIAL,
NBR_COLIS = t0.NBR_COLIS,
NOM_TRANSPORTEUR = t0.NOM_TRANSPORTEUR,
FACTURE_DIRECTE = t0.FACTURE_DIRECTE,
MOIS_FACTURE = t0.MOIS_FACTURE,
CLE_SITE_MOIS_FAC = t0.CLE_SITE_MOIS_FAC,
CLE_SITE_FD_CC = t0.CLE_SITE_FD_CC,
CLE_SITE_FD = t0.CLE_SITE_FD,
CLE_SITE_FD_CC_EDIT = t0.CLE_SITE_FD_CC_EDIT,
ARCHIVAGE = t0.ARCHIVAGE,
NO_TVA_CL = t0.NO_TVA_CL,
numero = t0.numero,
Bis = t0.bis,
P_identite = t0.P_identite,
p_numero = t0.p_numero,
p_du = t0.p_du,
p_par = t0.p_par,
nais_du = t0.nais_du,
nais_ville = t0.nais_ville,
nais_dep = t0.nais_dep,
nais_pays = t0.nais_pays,
num_siren = t0.num_siren,
id_bon_ademe = t0.id_bon_ademe,
poids_ademe_vhu = t0.poids_ademe_vhu,
CODE_BROYEUR = t0.CODE_BROYEUR,
IDLIGNES_BL = t.IDLIGNES_BL,
CODE_CLIENT_LI = t.CODE_CLIENT,
NO_BL_LI = t.NO_BL,
DATE_BL_LI = t.DATE_BL,
FAC_AVOIR_LI = t.FAC_AVOIR,
CODE_ARTICLE = t.CODE_ARTICLE,
NO_VEHICULE = t.NO_VEHICULE,
DESIGNATION = t.DESIGNATION,
QTE = t.QTE,
PU_HT = t.PU_HT,
REM_LI = t.REM,
CODE_TVA = t.CODE_TVA,
TAUX_TVA = t.TAUX_TVA,
NO_LIGNE = t.NO_LIGNE,
TYPE_ARTICLE = t.TYPE_ARTICLE,
LIB_LIBRE = t.LIB_LIBRE,
DESI_ARTICLE = t.DESI_ARTICLE,
CODE_GARANTIE = t.CODE_GARANTIE,
NO_FACTURE_LI = t.NO_FACTURE,
CODE_REGLEMENT_LI = t.CODE_REGLEMENT,
SITE_LI = t.SITE,
LIB_MODELE = t.LIB_MODELE,
PA_HT_TTC = t.PA_HT_TTC,
PU_NET = t.PU_NET,
PU_TTC = t.PU_TTC,
code_id_article = t.code_id_article,
site_stockage = t.site_stockage,
sans_trait_haut = t.sans_trait_haut,
nom_article_unique_demonter = t.nom_article_unique_demonter,
code_ademe_ligne = t.code_ademe_ligne,
poids_ademe = t.poids_ademe,
type_article_ademe = t.type_article_ademe,
consistance = t.consistance,
conditionnement = t.conditionnement,
nombre_carcasse = t.nombre_carcasse,
num_vehicule_entretien = t.num_vehicule_entretien,
num_immat_vehi_entretien = t.num_immat_vehi_entretien
};
}
I get error code:4004. what does it mean?
This seems like a promising thread:
http://forums.silverlight.net/p/208030/496837.aspx
Sorry I can't help much beyond that. From there it appears to be an authentication/authorization issue with windows integrity.