Я новичок с единством и единицей рабочего шаблона, и я пытаюсь написать код, который подключается к моему веб-сервису и выполняет всю работу. Все идет хорошо, пока я не использую базу данных, но я теряюсь, когда пытаюсь использовать веб-сервис.MVC3 - Unity/Unit of Work Образец и реализация Webservice
Я потратил впустую свои 2 драгоценных дня, исследуя каждую возможную статью, связанную с ней, и применяю ее к моему коду, но не удача до даты.
Я знаю, написав строку подключения в web.config и вызвав ее в контроллере класса dbcontext, подключится к требуемой базе данных, но я не подключаюсь к какой-либо базе данных, поэтому какие изменения мне нужно сделать в веб-приложении. конфигурации. Кроме того, даже если я пишу логику подключения в конструкторе dbcontext, он по-прежнему ищет и заполняет dbcontext данными сервера sql. Я предполагаю, что это происходит, потому что я использую DBSet.
Ребята, вас просят взглянуть на мой код, я сделал и покажу мне некоторую надежду, что смогу это сделать. Дайте мне знать, если вам нужна другая информация, связанная с кодом, который вы хотите увидеть.
благодаря
DBCONTEXT
public class CVSContext : DbContext
{
public DbSet<CVSViewModel> CVS { get; set; }
public DbSet<Contact> Contacts { get; set; }
public DbSet<Account> Accounts { get; set; }
public CVSContext()
{
//CRM Start
var clientCredentials = new System.ServiceModel.Description.ClientCredentials();
clientCredentials.UserName.UserName = "";
clientCredentials.UserName.Password = "";
var serviceProxy = new Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy(new Uri("http://Organization.svc"), null, clientCredentials, null);
serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
HttpContext.Current.Session.Add("ServiceProxy", serviceProxy);
//CRM End
}
}
GENERIC Repository
public class GenericRepository<TEntity> where TEntity : class
{
internal CVSContext context;
internal DbSet<TEntity> dbSet;
public GenericRepository(CVSContext context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
}
БЛОК РАБОТЫ
public interface IUnitOfWork : IDisposable
{
int SaveChanges();
}
public interface IDALContext : IUnitOfWork
{
ICVSRepository CVS { get; set; }
IContactRepository Contacts { get; set; }
//IAccountRepository Accounts { get; set; }
}
public class DALContext : IDALContext
{
private CVSContext dbContext;
private ICVSRepository cvs;
private IContactRepository contacts;
// private IAccountRepository accounts;
public DALContext()
{
dbContext = new CVSContext();
}
public ICVSRepository CVS
{
get
{
if (cvs == null)
cvs = new CVSRepository(dbContext);
return cvs;
}
set
{
if (cvs == value)
cvs = value;
}
}
public IContactRepository Contacts
{
get
{
if (contacts == null)
contacts = new ContactRepository(dbContext);
return contacts;
}
set
{
if (contacts == value)
contacts = value;
}
}
public int SaveChanges()
{
return this.SaveChanges();
}
public void Dispose()
{
if(contacts != null)
contacts.Dispose();
//if(accounts != null)
// accounts.Dispose();
if(dbContext != null)
dbContext.Dispose();
GC.SuppressFinalize(this);
}
}
СЕРВИС
public interface ICVSService
{
Contact CreateContact(Guid contactName, string productName, int price);
List<CVSViewModel> GetCVS();
List<Contact> GetContacts();
List<Account> GetAccounts();
}
public class CVSService : ICVSService, IDisposable
{
private IDALContext context;
public CVSService(IDALContext dal)
{
context = dal;
}
public List<CVSViewModel> GetCVS()
{
return context.CVS.All().ToList();
}
public List<Contact> GetContacts()
{
return context.Contacts.All().ToList();
}
public List<Account> GetAccounts()
{
return context.Accounts.All().ToList();
}
public Contact CreateContact(Guid contactName, string accountName, int price)
{
var contact = new Contact() { ContactId = contactName };
var account = new Account() { ContactName = accountName, Rent = price, Contact = contact };
//context.Contacts.Create(contact);
context.SaveChanges();
return contact;
}
public void Dispose()
{
if (context != null)
context.Dispose();
}
}
КОНТРОЛЛЕР
public ActionResult Index()
{
ViewData.Model = service.GetContacts();
return View();
}
Sooo .... что именно вы хотите знать? – Steven
@Steven: что я хочу знать, как я могу использовать webservice, потому что, если я использую dbset или dbcontext, я не получаю никакой ссылки на webservice, хотя я указываю его в конструкторе dbcontext. может быть, я не знаю, как закодировать его. пожалуйста помогите. – DotNetGeek
Прошу прощения, но я до сих пор не понимаю ваш вопрос. DbContext - это абстракция над базами данных, а не через веб-службы. Если вы цель, используйте DbContext для связи с веб-сервисом, вы потерпите неудачу. Это невозможно. – Steven