namespace CQGlobal.BackOffice.Domain.RmsRepository
{
using System;
using CQGlobal.BackOffice.Domain.RmsModel;
using CQGlobal.BackOffice.Service.Types;
using System.Collections.Generic;
using TmsModel = CQGlobal.BackOffice.Domain.TmsModel;
using tmsTypes = CQGlobal.BackOffice.Domain.TmsTypes;
public interface IRiskManagementRepository : IDisposable
{
void DataAffectedByPriceChange(List<Tb_ClosingPrice> prices);
//void DataAffectedByPositionChangeByOrder(List<Tb_OrderImport> orders);
//IEnumerable<string> DataAffectedByPositionChangeByOrder(List<Tb_OrderImport> orders, ref List<RMSSummary> summary);
IEnumerable<string> ExecuteNewOrders(List<Tb_OrderImport> orders, bool simulate = false);
IEnumerable<string> FetchRMSTopics(string search);
IEnumerable<string> FetchRMSTopics(string search, string orderby="AcctNo", int page=0, int size=0);
IEnumerable<RMSDisplay> FetchRMSSummary(string search);
IEnumerable<RMSDisplay> FetchRMSSummary(string search, string orderby = "AcctNo", int page = 0, int size = 0);
IEnumerable<RMSDisplay> FetchRMSSummaryByTopic(List<string> topics, long companyId);
IEnumerable<string> InsertRiskManagementSummaryRemarks(Tb_RiskManagementSummaryRemarks remark);
IEnumerable<string> UpdateRiskManagementSummaryRemarks(Tb_RiskManagementSummaryRemarks remark);
IEnumerable<string> DeleteRiskManagementSummaryRemarks(Tb_RiskManagementSummaryRemarks remark);
IEnumerable<string> DeleteRiskManagementSummaryRemarks(Guid recordId);
IEnumerable<Tb_RiskManagementSummaryRemarks> FetchSummaryRemarks(string acctNo, long companyId, int period = 0);
#region "RMS details"
IEnumerable<Tb_CashRPValuationCollateral> FetchValuationCollateral(long companyId, string acctNo = null, string currCd = null, long fundSourceID = 0);
IEnumerable<Tb_CustodyAssetsRPValuationCollateral> FetchValuationCollateral(long companyId, string acctNo = null, string currCd = null, long fundSourceID = 0, long instrumentId = 0, long productId = 0);
IEnumerable<Tb_NonEquityAssetsValuationCollateral> FetchValuationCollateral(long companyId, string acctNo = null, string assetNo = null);
IEnumerable<TmsModel.Tb_Transactions> FetchTMSTransactions(long companyId, string acctNo = null, string transNo = null, string transGroupNo = null, string currCd = null, long fundSourceID = 0);
IEnumerable<Tb_ContractOutstanding> FetchOutstandingContracts(long companyId, string acctNo = null, string contractNo = null, short contractPartNo = -1, string currCd = null, long fundSourceID = 0);
IEnumerable<TmsModel.Tb_ContractOutstanding> FetchTMSOutstandingContracts(long companyId, string acctNo = null, string contractNo = null, short contractPartNo = -1, string currCd = null, long fundSourceID = 0);
IEnumerable<Tb_OrderImport> FetchOrders(long companyId, string acctNo = null, long orderNo = 0, long subOrderNo = -1, string currCd = null);
IEnumerable<TmsModel.Tb_ContractOutstanding> FetchExecutedOrdersAndTMSContracts(long companyId, string acctNo = null, string currCd = null);
Tb_Date FetchBusinessDate(long companyId = 0);
#endregion "RMS details"
}
}
[LogOperation]
[LogServiceErrors]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerCall)]
public class RmsOrchestrationContext : EntityService<IRiskManagementRepository>, CQGlobal.BackOffice.Service.Types.Contracts.IRmsContract
{
public string DoWork(string work)
{
//System.Diagnostics.Trace.WriteLine("Called From Service");
return string.Format("You entered: {0}", work);
}
public IEnumerable<RMSDisplay> SearchSummary(string filter,string ordering="AccountNo",int pageNo=0, int pageSize=0)
{
try
{
using (IRiskManagementRepository repo = new RiskManagementRepository())
{
return repo.FetchRMSSummary(filter, ordering, pageNo, pageSize);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
}
}
namespace CQGlobal.BackOffice.Service.Types
{
using System;
using System.Runtime.Serialization;
using System.Text;
using System.Collections.Generic;
[DataContract(IsReference = true, Namespace = "http://www.cqglobal.com/rms/")]
[Serializable]
public class RMSDisplay
{
[DataMember]
public System.DateTime ReportDate { get; set; }
[DataMember]
public string RecordType { get; set; }
[DataMember]
public string AggregateLevel { get; set; }
[DataMember]
public string AcctNo { get; set; }
[DataMember]
public long CompanyId { get; set; }
[DataMember]
public string CurrCd { get; set; }
[DataMember]
public int SchemeId { get; set; }
[DataMember]
public decimal ExchRate { get; set; }
[DataMember]
public decimal LedgerBFBalance { get; set; }
[DataMember]
public decimal EquitySettlement { get; set; }
[DataMember]
public decimal Adjustment { get; set; }
[DataMember]
public decimal RealisedPL { get; set; }
[DataMember]
public decimal CommissionCharges { get; set; }
[DataMember]
public decimal OptionPremium { get; set; }
[DataMember]
public decimal LedgerRPBalance { get; set; }
[DataMember]
public decimal CollateralRPBalance { get; set; }
[DataMember]
public decimal UnrealisedPLBalance { get; set; }
[DataMember]
public decimal MarginIM { get; set; }
[DataMember]
public decimal MarginMM { get; set; }
[DataMember]
public decimal MarginIMExcessDeficit { get; set; }
[DataMember]
public decimal MarginIMRPExcessDeficit { get; set; }
[DataMember]
public decimal MarginMMExcessDeficit { get; set; }
[DataMember]
public decimal MarginMMRPExcessDeficit { get; set; }
[DataMember]
public System.DateTime LastUpdated { get; set; }
[DataMember]
public string AcctExecutiveCd { get; set; }
[DataMember]
public Nullable<System.Guid> RecordId { get; set; }
[DataMember]
public string Topic { get; set; }
[DataMember]
public string Remarks { get; set; }
[DataMember]
public int Page { get; set; }
[DataMember]
public int Size { get; set; }
[DataMember]
public int TotalCount { get; set; }
[DataMember]
public List<string> ValidationErrors { get; set; }
*[DataMember]
public string ClientName { get; set; }*
#region IExtensibleDataObject Members
public ExtensionDataObject ExtensionData { get; set; }
#endregion IExtensibleDataObject Members
}
}
I wrote my service in visual studio 2010 version. And then I upgraded it into visual studio 2012. When I add properties to my contract the ClientName I got a null value to this property. I already tried put order in the fields still I don't get the value I expected even I hardcoded the value. I also try recycle of the AppPool, restart my pc still has error. Sorry I dont show you the actual implementation of this function repo.FetchRMSSummary(filter, ordering, pageNo, pageSize). As I traced it in the server side it has a value but when i consume the service I cannot get right value. My property become a nullobject but the rest old properties has the right value.
Please help me.
I'd try to override deserialization of your object to debug it. I had similar issue when deserialization was failed.
I already solved the problem. Actually we made a serializer of the contract so that it could boost the performance of the service and it goes something bad that my client got the old one which is acted weird because it caches to the system.
Related
I am still learning SQL, but as I got stuck in these doubt I wrote it here.
Actually I want print a table for list of details which hold a column for "Description". Now this data is retrieving from tblBillDetails. and in tblBillDetails there is no column or field of "Description. Now there is another field which is tblProduct here I have column "Name" & "Id".
So I want something like "Description = tblProduct.Name where tblBillDetails.FunctionId == tblProduct.Id
code--->
.cs file
public class BillDetail
{
public long Id { get; set; }
public long BillId { get; set; }
public int FunctionType { get; set; }
public long FunctionId { get; set; }
public long VatId { get; set; }
public int Quantity { get; set; }
public int Points { get; set; }
public decimal TotalValue { get; set; }
public decimal FreeValue { get; set; }
public DateTime SaleDateTime { get; set; }
public long BalanceId { get; set; }
public decimal RunningBalance { get; set; }
}
repositoy .cs file
public Task<BillDetail> SingleAsync(Guid shardKey, long BillDetailId)
{
return _billDetailDataAccess.SingleAsync(shardKey, BillDetailId);
}
DataAccess .cs file
public async Task<BillDetail> SingleAsync(Guid shardKey, long BillDetailId)
{
string sql = #"SELECT [Id]
,[TenantClientId]
,[BillId]
,[FunctionType]
,[FunctionId]
,[VatId]
,[Quantity]
,[Points]
,[TotalValue]
,[FreeValue]
,[SaleDateTime]
,[BalanceId]
,[RunningBalance]
,[Archived]
FROM [dbo].[tblBillDetail]
WHERE [tblBillDetail].[Id] = #BillDetailId
;";
await _context.OpenConnectionForKeyAsync(shardKey);
return await _context.Connection.QueryFirstOrDefaultAsync<BillDetail>(sql, new { BillDetailId });
}
I am trying to insert value in DateTime column with Entity Framework but it throwing error on db.SaveChanges() function. There are 2 DateTime columns but exception throwing for only one (entry.OT_Date) with no maximum detail.
var entry = new OT_Request_N();
entry.Emp_ID = StaticFunctions.WindowUserId;
entry.slno = db.OT_Request_N.Max(x=>x.slno)+1;
entry.OT_Date= otD;
entry.OT_Time_Req = hourRequest;
entry.Remarks_Req = sError.ReqRemarks;
entry.Req_Sent_On = DateTime.Now;
entry.Supervisor_ID = sError.ManagerID;
entry.Approve_Status = 0;
db.OT_Request_N.Add(entry);
db.SaveChanges();
Here is SQL table Design
Here is class generated in edmx file
public partial class OT_Request_N
{
public int slno { get; set; }
public string Emp_ID { get; set; }
public Nullable<System.DateTime> Req_Sent_On { get; set; }
public Nullable<int> OT_Time_Req { get; set; }
public string Supervisor_ID { get; set; }
public string Remarks_Req { get; set; }
public string Remarks_App { get; set; }
public Nullable<int> OT_Time_App { get; set; }
public string Approved_By { get; set; }
public Nullable<int> Approve_Status { get; set; }
public Nullable<System.DateTime> Approved_On { get; set; }
public Nullable<int> Operations { get; set; }
public string AltReq_ID { get; set; }
public Nullable<bool> Is_alert_sent { get; set; }
public Nullable<System.DateTime> OT_Date { get; set; }
}
Why do I get this error:
Error 1 'JoomlaWebservice.KundeService' does not implement interface
member 'JoomlaWebservice.ServiceInterface.HentOpgave(int)'.
'JoomlaWebservice.KundeService.HentOpgave(int)' cannot implement
'JoomlaWebservice.ServiceInterface.HentOpgave(int)' because it does
not have the matching return type of
'JoomlaWebservice.Opgave'. C:\Visual Studio
2010\Projects\JoomlaWebservice\JoomlaWebservice\KundeService.svc.cs 12 18 JoomlaWebservice
Code (Service):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace JoomlaWebservice
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
public class KundeService : ServiceInterface
{
LIMSEntities LimsEntities;
public class OpgaveOverskrift
{
public int id { get; set; }
public string nummer { get; set; }
public string sagsnavn { get; set; }
public string sagsnr { get; set; }
public string matrix { get; set; }
public string status { get; set; }
}
public class Opgave
{
public int id { get; set; }
public string nummer { get; set; }
public string sagsnavn { get; set; }
public string sagsnr { get; set; }
public string journalnr { get; set; }
public string omnummer { get; set; }
public string matrix { get; set; }
public string status { get; set; }
public string anlaeg { get; set; }
public string anlaeg_kode2 { get; set; }
public bool akkrediteret { get; set; }
public string modtagdato { get; set; }
public string analysedato { get; set; }
public string rapportdato { get; set; }
public int antalproever { get; set; }
public string preopbevar { get; set; }
public int antalbilag { get; set; }
public string rapportnoter { get; set; }
public string afssagsbehandler_navn { get; set; }
public string afssagsbehandler_titel { get; set; }
public string hmansvarlig_navn { get; set; }
public string hmansvarlig_titel { get; set; }
public string kontakt { get; set; } //k0_kontakt01
public string afdeling { get; set; }
public string adresse { get; set; }
public string nation { get; set; }
public string postnummer { get; set; }
public string distrikt { get; set; }
public string postdist { get; set; } //std00002
}
public class Parameter
{
public int id { get; set; }
public int o1id { get; set; }
public string minimum { get; set; }
public string vejledende { get; set; }
public string maksimum { get; set; }
public string bemaerkning { get; set; }
public string parameter { get; set; }
public int metoderf { get; set; }
public int raekkefoelge { get; set; }
public string enhed { get; set; }
public string metoderef { get; set; }
public string detektionsgraense { get; set; }
public string nedremaalegraense { get; set; }
public string oevremaalegraense { get; set; }
public string knaek { get; set; }
public string nedreusikkerhedabs { get; set; }
public string nedreusikkerhedrel { get; set; }
public string oevreusikkerhedabs { get; set; }
public string oevreusikkerhedrel { get; set; }
public string resultat { get; set; }
public int a0id { get; set; }
public bool akkrediteret { get; set; }
public string analysested { get; set; }
public string kommentar { get; set; }
public int laboratorieid { get; set; } //a_internmetode
public string danakkode { get; set; } //k0_kontakt01
}
public List<Parameter> Parametre(int o1id)
{
using (LimsEntities = new LIMSEntities())
{
return (from i in LimsEntities.O2_Parameter01
where i.O1ID == o1id
select new Parameter()
{
a0id = i.A0ID.HasValue ? (int)i.A0ID : 0,
akkrediteret = i.Akkrediteret.HasValue ? (bool)i.Akkrediteret : false,
analysested = i.AnalyseSted,
bemaerkning = i.Bemærkning,
detektionsgraense = i.Detektionsgrænse,
enhed = i.Enhed,
id = i.ID,
knaek = i.Knæk,
kommentar = i.Kommentar,
maksimum = i.Maksimum,
metoderef = i.Metoderef,
metoderf = i.MetodeRf.HasValue ? (int)i.MetodeRf : 1,
minimum = i.Minimum,
nedremaalegraense = i.NedreMålegrænse,
nedreusikkerhedabs = i.NedreUsikkerhedAbs,
nedreusikkerhedrel = i.NedreUsikkerhedRel,
o1id = i.O1ID,
oevremaalegraense = i.ØvreMålegrænse,
oevreusikkerhedabs = i.ØvreUsikkerhedAbs,
oevreusikkerhedrel = i.ØvreUsikkerhedRel,
parameter = i.Parameter,
raekkefoelge = i.Rækkefølge.HasValue ? (int)i.Rækkefølge : 1,
resultat = i.Resultat,
vejledende = i.VejledendeVærdi,
laboratorieid = i.ParameterIAnalyser.A_InternMetode.K0ID.HasValue ? (int)i.ParameterIAnalyser.A_InternMetode.K0ID : 0,
danakkode = i.ParameterIAnalyser.A_InternMetode.K0_Kontakt01.DANAKkode
}).ToList();
}
}
public class Proeve
{
public int id { get; set; }
public int o0id { get; set; }
public string omfang { get; set; }
public string formaal { get; set; }
public string proevetager { get; set; }
public string udtagdatostart { get; set; }
public string udtagdatoslut { get; set; }
public string dybde { get; set; }
public string proeveid { get; set; }
public string abtekst { get; set; } //ab_formål
}
public List<Proeve> Proever(int o0id)
{
using (LimsEntities = new LIMSEntities())
{
return (from i in LimsEntities.O1_Prøve
join f in LimsEntities.AB_Formål on i.Formål equals f.ID.ToString() into fs
from f in fs.DefaultIfEmpty()
where i.O0ID == o0id
select new Proeve()
{
id = i.ID,
o0id = i.O0ID,
omfang = i.Omfang,
formaal = i.Formål,
proevetager = i.Prøvetager,
udtagdatostart = i.UdtagDatoStart,
udtagdatoslut = i.UdtagDatoSlut,
dybde = i.Dybde,
proeveid = i.PrøveID,
abtekst = f == null ? "" : f.Tekst
}).ToList();
}
}
public int Login(String username, String password)
{
LimsEntities = new LIMSEntities();
IEnumerable<K1_Kontaktperson01> kontakter = from k in LimsEntities.K1_Kontaktperson01
where k.HSBrugernavn == username && k.HSAdgangskode == password
select k;
return kontakter.FirstOrDefault().K0ID;
}
public List<OpgaveOverskrift> OpgaveOverskrifter(int k0id)
{
using (LimsEntities = new LIMSEntities())
{
return (from i in LimsEntities.O0_Opgave01
where i.K0ID == k0id
select new OpgaveOverskrift()
{
id = i.ID,
nummer = i.Nummer,
sagsnavn = i.Sagsnavn,
sagsnr = i.SagsNr,
matrix = i.Matrix,
status = i.Status
}).ToList();
}
}
public Opgave HentOpgave(int o0id)
{
/* Opgave test = new Opgave();
return test;*/
using (LimsEntities = new LIMSEntities())
{
return (from i in LimsEntities.O0_Opgave01
where i.ID == o0id
select new Opgave()
{
id = i.ID,
nummer = i.Nummer,
sagsnavn = i.Sagsnavn,
sagsnr = i.SagsNr,
matrix = i.Matrix,
journalnr = i.JournalNr,
omnummer = i.OMNummer,
status = i.Status,
anlaeg = i.Anlæg,
anlaeg_kode2 = i.Anlæg_Kode2,
akkrediteret = i.Akkrediteret,
modtagdato = i.ModtagDato,
analysedato = i.AnalyseDato,
rapportdato = i.RapportDato,
antalproever = i.AntalPrøver.HasValue ? (int)i.AntalPrøver.Value : 0,
preopbevar = i.PreOpbevar,
antalbilag = i.AntalBilag.HasValue ? (int)i.AntalBilag.Value : 0,
rapportnoter = i.RapportNoter,
afssagsbehandler_navn = i.AFSSagsbehandler_Navn,
afssagsbehandler_titel = i.AFSSagsbehandler_Titel,
hmansvarlig_navn = i.HMAnsvarlig_Navn,
hmansvarlig_titel = i.HMAnsvarlig_Titel,
kontakt = i.K0_Kontakt01.Kontakt,
afdeling = i.K0_Kontakt01.Afdeling,
adresse = i.K0_Kontakt01.Adresse,
nation = i.K0_Kontakt01.Nation,
postnummer = i.K0_Kontakt01.Postnummer,
distrikt = i.K0_Kontakt01.Distrikt,
postdist = i.K0_Kontakt01.std00002.postdist
}).FirstOrDefault();
}
}
}
}
Code (Interface):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace JoomlaWebservice
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface ServiceInterface
{
[OperationContract]
int Login(String username, String password);
[OperationContract]
Opgave HentOpgave(int o0id);
// TODO: Add your service operations here
}
// Use a data contract as illustrated in the sample below to add composite types to service operations.
[DataContract]
public class OpgaveOverskrift
{
[DataMember]
public int id { get; set; }
[DataMember]
public string sagsnavn { get; set; }
[DataMember]
public string sagsnr { get; set; }
[DataMember]
public string matrix { get; set; }
[DataMember]
public string status { get; set; }
}
[DataContract]
public class Opgave
{
[DataMember]
public int id { get; set; }
[DataMember]
public string nummer { get; set; }
[DataMember]
public string sagsnavn { get; set; }
[DataMember]
public string sagsnr { get; set; }
[DataMember]
public string journalnr { get; set; }
[DataMember]
public string omnummer { get; set; }
[DataMember]
public string matrix { get; set; }
[DataMember]
public string status { get; set; }
[DataMember]
public string anlaeg { get; set; }
[DataMember]
public string anlaeg_kode2 { get; set; }
[DataMember]
public bool akkrediteret { get; set; }
[DataMember]
public string modtagdato { get; set; }
[DataMember]
public string analysedato { get; set; }
[DataMember]
public string rapportdato { get; set; }
[DataMember]
public int antalproever { get; set; }
[DataMember]
public string preopbevar { get; set; }
[DataMember]
public int antalbilag { get; set; }
[DataMember]
public string rapportnoter { get; set; }
[DataMember]
public string afssagsbehandler_navn { get; set; }
[DataMember]
public string afssagsbehandler_titel { get; set; }
[DataMember]
public string hmansvarlig_navn { get; set; }
[DataMember]
public string hmansvarlig_titel { get; set; }
[DataMember]
public string kontakt { get; set; } //k0_kontakt01
[DataMember]
public string afdeling { get; set; }
[DataMember]
public string adresse { get; set; }
[DataMember]
public string nation { get; set; }
[DataMember]
public string postnummer { get; set; }
[DataMember]
public string distrikt { get; set; }
[DataMember]
public string postdist { get; set; } //std00002
}
[DataContract]
public class Proeve
{
[DataMember]
public int id { get; set; }
[DataMember]
public int o0id { get; set; }
[DataMember]
public string omfang { get; set; }
[DataMember]
public string formaal { get; set; }
[DataMember]
public string proevetager { get; set; }
[DataMember]
public string udtagdatostart { get; set; }
[DataMember]
public string udtagdatoslut { get; set; }
[DataMember]
public string dybde { get; set; }
[DataMember]
public string proeveid { get; set; }
[DataMember]
public string abtekst { get; set; } //ab_formål
}
[DataContract]
public class Parameter
{
[DataMember]
public int id { get; set; }
[DataMember]
public int o1id { get; set; }
[DataMember]
public string minimum { get; set; }
[DataMember]
public string vejledende { get; set; }
[DataMember]
public string maksimum { get; set; }
[DataMember]
public string bemaerkning { get; set; }
[DataMember]
public string parameter { get; set; }
[DataMember]
public int metoderf { get; set; }
[DataMember]
public int raekkefoelge { get; set; }
[DataMember]
public string enhed { get; set; }
[DataMember]
public string metoderef { get; set; }
[DataMember]
public string detektionsgraense { get; set; }
[DataMember]
public string nedremaalegraense { get; set; }
[DataMember]
public string oevremaalegraense { get; set; }
[DataMember]
public string knaek { get; set; }
[DataMember]
public string nedreusikkerhedabs { get; set; }
[DataMember]
public string nedreusikkerhedrel { get; set; }
[DataMember]
public string oevreusikkerhedabs { get; set; }
[DataMember]
public string oevreusikkerhedrel { get; set; }
[DataMember]
public string resultat { get; set; }
[DataMember]
public int a0id { get; set; }
[DataMember]
public bool akkrediteret { get; set; }
[DataMember]
public string analysested { get; set; }
[DataMember]
public string kommentar { get; set; }
[DataMember]
public int laboratorieid { get; set; } //a_internmetode
[DataMember]
public string danakkode { get; set; } //k0_kontakt01
}
}
You're returning JoomlaWebservice.KundeService.Opgave, not JoomlaWebservice.Opgave. You need to change your code to either return the contract directly or to map between your created object and the contract.
I have the following entity framework code snippet which has a "Groups" table and a child "ApplicationsGroupsLK" table that contains an ApplicationID field that I need.
IEnumerable<Groups> Groups = DbContext.Groups.Include("ApplicationsGroupsLK").Where(p => p.GroupNumber > 0);
The child data comes back obviously in a collection.
I basically need to display the parent data along with the child ApplicationID field (many Applications to 1 Group).
In my MVC View, what should my ViewModel look like that would contain the parent and child data coming back that I need in order that I can properly bind it to a grid?
Second post:
Further, the following model was generated from Entity Framework:
public partial class Project
{
public Project()
{
this.TimeTrackings = new HashSet<TimeTracking>();
}
[DataMember]
public short ProjectID { get; set; }
[DataMember]
public short CustomerID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public short CategoryID { get; set; }
[DataMember]
public short PriorityID { get; set; }
[DataMember]
public short StatusID { get; set; }
[DataMember]
public Nullable<decimal> Quote { get; set; }
[DataMember]
public string Notes { get; set; }
[DataMember]
public System.DateTime CreatedDate { get; set; }
[DataMember]
public Nullable<System.DateTime> UpdatedDate { get; set; }
[DataMember]
public virtual Category Category { get; set; }
[DataMember]
public virtual Customer Customer { get; set; }
[DataMember]
public virtual Priority Priority { get; set; }
[DataMember]
public virtual Status Status { get; set; }
[DataMember]
public virtual ICollection<TimeTracking> TimeTrackings { get; set; }
}
You can see that TimeTrackings is the child table of Project. You can also see that CategoryID, CustomerID, PriorityID, and StatusID are foreign keys that the parent table has. In this case, I'm only interested in the CategoryID FK.
I haven't done this yet (not at my machine at home), but when I get the data into this model, what would actually be contained in the public virtual Category Category field? Since it's not a collection, what data is returned in this field after the query executes.
Third post:
Telerik asp.net for mvc syntax for DB call:
IEnumerable<Groups> GroupList = db.GetGroups();
return View(new GridModel<Groups>
{
Data = GroupList
});
Fourth post:
Trey, below is the code I modified for my purposes and was hoping you can check it over before I implement it. I think I undersand it and seems great...
public partial class Project
{
public Project()
{
this.TimeTrackings = new HashSet<TimeTracking>();
}
[DataMember]
public short ProjectID { get; set; }
[DataMember]
public short CustomerID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public short CategoryID { get; set; }
[DataMember]
public short PriorityID { get; set; }
[DataMember]
public short StatusID { get; set; }
[DataMember]
public Nullable<decimal> Quote { get; set; }
[DataMember]
public string Notes { get; set; }
[DataMember]
public System.DateTime CreatedDate { get; set; }
[DataMember]
public Nullable<System.DateTime> UpdatedDate { get; set; }
[DataMember]
public short ApplicationID { get; set; }
[DataMember]
public string ApplicationName { get; set; }
[DataMember]
public virtual Category Category { get; set; }
[DataMember]
public virtual Customer Customer { get; set; }
[DataMember]
public virtual Priority Priority { get; set; }
[DataMember]
public virtual Status Status { get; set; }
[DataMember]
public virtual ICollection<TimeTracking> TimeTrackings { get; set; }
public ProjectModel(Project project)
{
ProjectID = project.ProjectID;
CustomerID = project.CustomerID;
Name = project.Name;
Description = project.Description;
CategoryID = project.CategoryID;
PriorityID = project.PriorityID;
StatusID = project.StatusID;
Quote = project.Quote;
Notes = project.Notes;
CreatedDate = project.CreatedDate;
UpdatedDate = project.UpdatedDate;
ApplicationID = project.ApplicationsGroupsLK.ApplicationID;
ApplicationName = project.ApplicationsGroupsLK.ApplicationName;
}
// Neat Linq trick to convert database query results directly to Model
public static IList<ProjectModel> FlattenToThis(IList<Project> projects)
{
return projects.Select(project => new ProjectModel(project)).ToList();
}
}
Fifth post:
using (wmswebEntities DbContext = new wmswebEntities())
{
DbContext.Configuration.ProxyCreationEnabled = false;
DbContext.Database.Connection.Open();
IEnumerable<Projects> projects = DbContext.Projects.Where(p => p.GroupNumber > 0);
IList<ProjectModel> results = Project.FlattenToThis(projects);
return results
}
Sixth post
namespace CMSEFModel
{
using System;
using System.Collections.Generic;
public partial class GroupModel
{
public GroupModel()
{
this.ApplicationsGroupsLKs = new HashSet<ApplicationsGroupsLK>();
this.GroupApplicationConfigurationsLKs = new HashSet<GroupApplicationConfigurationsLK>();
this.UsersGroupsLKs = new HashSet<UsersGroupsLK>();
}
public int GroupNumber { get; set; }
public string GroupName { get; set; }
public int GroupRank { get; set; }
public bool ActiveFlag { get; set; }
public System.DateTime DateAdded { get; set; }
public string AddedBy { get; set; }
public System.DateTime LastUpdated { get; set; }
public string LastUpdatedBy { get; set; }
// Application - Lazy Loading population
public int ApplicationID { get; set; }
// UsersGroupsLK - Lazy Loading population
public int UserNumber { get; set; }
public string UserID { get; set; }
public virtual ICollection<ApplicationsGroupsLK> ApplicationsGroupsLKs { get; set; }
public virtual ICollection<GroupApplicationConfigurationsLK> GroupApplicationConfigurationsLKs { get; set; }
public virtual ICollection<UsersGroupsLK> UsersGroupsLKs { get; set; }
public GroupModel()
{}
public GroupModel(GroupModel group)
{
GroupNumber = group.GroupNumber;
GroupName = group.GroupName;
ActiveFlag = group.ActiveFlag;
DateAdded = group.DateAdded;
AddedBy = group.AddedBy;
LastUpdated = group.LastUpdated;
LastUpdatedBy = group.LastUpdatedBy;
UserNumber = group.UsersGroupsLKs.
}
// Neat Linq trick to convert database query results directly to Model
public static IList<GroupModel> FlattenToThis(IList<GroupModel> groups)
{
return groups.Select(group => new GroupModel(group)).ToList();
}
}
}
Seventh Post - this is the model I am having trouble with about the errors I previously posted. Trey, if you could help, I WOULD REALLY APPRECIATE IT.... I'm "dead in the water" unless I can get this part working.
namespace CMSEFModel
{
using System;
using System.Collections.Generic;
public partial class Group
{
public Group()
{
this.ApplicationsGroupsLKs = new HashSet<ApplicationsGroupsLK>();
this.GroupApplicationConfigurationsLKs = new HashSet<GroupApplicationConfigurationsLK>();
this.UsersGroupsLKs = new HashSet<UsersGroupsLK>();
}
public int GroupNumber { get; set; }
public string GroupName { get; set; }
public int GroupRank { get; set; }
public bool ActiveFlag { get; set; }
public System.DateTime DateAdded { get; set; }
public string AddedBy { get; set; }
public System.DateTime LastUpdated { get; set; }
public string LastUpdatedBy { get; set; }
// Application - Lazy Loading population
public int ApplicationID { get; set; }
// UsersGroupsLK - Lazy Loading population
public int UserNumber { get; set; }
public string UserID { get; set; }
public virtual ICollection<ApplicationsGroupsLK> ApplicationsGroupsLKs { get; set; }
public virtual ICollection<GroupApplicationConfigurationsLK> GroupApplicationConfigurationsLKs { get; set; }
public virtual ICollection<UsersGroupsLK> UsersGroupsLKs { get; set; }
public GroupModel(Group group)
{
GroupNumber = group.GroupNumber;
GroupName = group.GroupName;
ActiveFlag = group.ActiveFlag;
DateAdded = group.DateAdded;
AddedBy = group.AddedBy;
LastUpdated = group.LastUpdated;
LastUpdatedBy = group.LastUpdatedBy;
UserNumber = group.UsersGroupsLKs.
}
// Neat Linq trick to convert database query results directly to Model
public static IList<GroupModel> FlattenToThis(IList<Group> groups)
{
return groups.Select(group => new GroupModel(group)).ToList();
}
}
}
Eight post:
using (wmswebEntities DbContext = new wmswebEntities())
{
DbContext.Configuration.ProxyCreationEnabled = false;
DbContext.Configuration.LazyLoadingEnabled = true;
DbContext.Database.Connection.Open();
List<Groups> myGroups = new List<Groups>();
var myGroups = from p in DbContext.Groups
where p.ActiveFlag = true
select new
{
p.Groups.ApplicationName,
p.Groups.GroupName,
p.Groups.GroupRank,
p.Groups.ActiveFlag,
p.Groups.DateAdded,
p.Groups.AddedBy,
p.Groups.LastUpdated,
p.Groups.LastUpdatedBy,
p.Groups.ApplicationsGroupsLK.ApplicationID,
p.Groups.UsersGroupsLK.UserNumber
};
return myGroups;
}
This will take a slight tweak in thinking. The Grid will only accept a flat model. This type of question is asked often, here is a starter answer: Kendo UI Grid - How to Bind to Child Properties
If that does not help, post more of your code here and I can work through it with you.
I'm new to MVC and trying to figure out how to set default values for partial classes. I have been searching for 2 days now, and can't get anything to work. Here is a supposed solution, but it doesn't work for me. I also tried the [DefaultValue(10)] data annotation.
Here is the auto generated partial class created from the edmx file
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace OTIS.Models.Admin
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
public partial class Company
{
public Company()
{
this.Facilities = new HashSet<Facility>();
}
public int CompanyID { get; set; }
[Required]
[Display(Name = "Company Name")]
public string CompanyName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public decimal ItemMargin { get; set; }
public decimal ServicesMargin { get; set; }
public decimal InvoiceTimeIncrement { get; set; }
public decimal CashDiscountPct { get; set; }
public decimal BaseServiceHourlyRate { get; set; }
public decimal HourlyPremiumRush { get; set; }
public decimal HourlyPremiumLate { get; set; }
public decimal HourlyPremiumCustomerMaterial { get; set; }
public int CreatedByID { get; set; }
public System.DateTime CreatedOn { get; set; }
public int ModifiedBy { get; set; }
public System.DateTime ModifiedOn { get; set; }
public virtual UserProfile UserProfile { get; set; }
public virtual UserProfile UserProfile1 { get; set; }
public virtual ICollection<Facility> Facilities { get; set; }
}
}
Here is my partial class I created to add annotations.
namespace OTIS.Models.Admin
{
[MetadataType(typeof(CompanyMD))]
public partial class Company
{
//public Company()
//{
// //private System.DateTime _currentDateTime = DateTime.Now;
// ////Set Default Values
// //CreatedByID = (int)Membership.GetUser().ProviderUserKey;
// //CreatedOn = _currentDateTime;
// //ModifiedBy = (int)Membership.GetUser().ProviderUserKey;
// //ModifiedOn = _currentDateTime;
//}
public string FullAddress
{
get
{
return this.City + ", " + this.State + " " + this.PostalCode;
}
}
public class CompanyMD
{
private System.DateTime _currentDateTime = DateTime.Now;
private int _currentUser = (int)Membership.GetUser().ProviderUserKey;
[Display(Name = "Company ID")]
public int CompanyID { get; set; }
[Required]
[Display(Name = "Company Name")]
public string CompanyName { get; set; }
[Display(Name = "Address")]
public string Address1 { get; set; }
[Display(Name = "Address 2")]
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
[Display(Name = "Zip")]
public string PostalCode { get; set; }
[Display(Name = "Address")]
public string FullAddress { get; set; }
[Display(Name = "Material Margin")]
public decimal ItemMargin { get; set; }
[Display(Name = "Overtime Margin")]
public decimal ServicesMargin { get; set; }
[Display(Name = "Invoice Hour Increment")]
public decimal InvoiceTimeIncrement { get; set; }
private decimal _cashDiscountPct;
[Display(Name = "Cash Discount %")]
[DisplayFormat(DataFormatString = "{0:P2}")]
public decimal CashDiscountPct
{
get { return _cashDiscountPct; }
set { _cashDiscountPct = value/100; }
}
[Display(Name = "Base Hourly Rate ($/Hr)")]
[DataType(DataType.Currency), DisplayFormat(DataFormatString = "{0:C2}", ApplyFormatInEditMode = true)]
public decimal BaseServiceHourlyRate { get; set; }
[Display(Name = "Rush Premium ($/Hr)")]
[DataType(DataType.Currency), DisplayFormat(DataFormatString = "{0:C2}", ApplyFormatInEditMode = true)]
public decimal HourlyPremiumRush { get; set; }
[Display(Name = "Late Premium ($/Hr)")]
[DataType(DataType.Currency), DisplayFormat(DataFormatString = "{0:C2}", ApplyFormatInEditMode = true)]
[DefaultValue(75)]
public decimal HourlyPremiumLate { get; set; }
[Display(Name = "Cust Material Premium ($/Hr)")]
[DataType(DataType.Currency), DisplayFormat(DataFormatString = "{0:C2}", ApplyFormatInEditMode = true)]
public decimal HourlyPremiumCustomerMaterial { get; set; }
[Display(Name = "Created By")]
public int CreatedByID { get; set; }
//{
// get { return _currentUser; }
// set { _currentUser = value; }
//}
[Display(Name = "Created On")]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
//[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public System.DateTime CreatedOn
{
get { return _currentDateTime; }
set { _currentDateTime = value; }
}
[Display(Name = "Modified By")]
public int ModifiedBy { get; set; }
//{
// get { return _currentUser; }
// set { _currentUser = value; }
//}
[Display(Name = "Modified On")]
public System.DateTime ModifiedOn
{
get { return _currentDateTime; }
set { _currentDateTime = value; }
}
}
}
}
And then in my controller, I instantiate a new instance of the class to initialize it, but the values I set don't get set.
//
// GET: /Company/Create
public ActionResult Create()
{
ViewBag.CreatedByID = new SelectList(db.UserProfiles, "UserId", "UserName");
ViewBag.ModifiedBy = new SelectList(db.UserProfiles, "UserId", "UserName");
Company newCompany = new Company();
return View(newCompany);
}
Sorry this is so late, but I just solved a similar scenario myself.
I think the problem is how you refer to the partial class. It should be an empty reference to the partial class with no code. EF uses this "declaration" to link your partial class to your metadata class. So, your metadata class should look like this:
namespace OTIS.Models.Admin
{
[MetadataType(typeof(CompanyMD))]
public partial class Company
{} // <-- note the close bracket!
public class CompanyMD
{
private System.DateTime _currentDateTime = DateTime.Now;
private int _currentUser = (int)Membership.GetUser().ProviderUserKey;
public string FullAddress
{
get
{
return this.City + ", " + this.State + " " + this.PostalCode;
}
}
[Display(Name = "Company ID")]
public int CompanyID { get; set; }
[Required]
[Display(Name = "Company Name")]
public string CompanyName { get; set; }
// ....etc.... removed for brevity
} // close metadata class
} // close namespace
Hope this helps!
I found I needed to handle this in my Repository Class in a GetNew() method that would populate the default values of a new instance of the class.