저는 정말 간단한 것을 시도하고 있습니다 만, Entity Framework에는 수십 가지 방법이있는 것 같지만 어느 것도 작동하지 않습니다.Entity Framework POCO 업데이트 엔터티?
나는 데이터베이스에서 읽은 POCO 클래스가 있으며 해당 클래스의 변경 사항으로 데이터베이스를 업데이트하려고합니다. 그것이 내가 원하는 전부입니다. 여기
내가 노력하고 무엇 : -1) 내 POCO 클래스 : -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc; // Needs project reference to System.Web.Mvc 3.0.0.0
using System.ComponentModel.DataAnnotations; // Needs project reference to System.ComponentModel.DataAnnotations 4.0.0.0
namespace Trust.Domain.Entities
{
public class Product
{
[HiddenInput(DisplayValue=false)]
public Int32 ProductID { get; set; }
[Required(ErrorMessage = "Please enter a product name.")]
public String Name { get; set; }
[DataType(DataType.MultilineText)]
public String Description { get; set; }
public Decimal? PriceGuide { get; set; }
public Decimal? PriceSold { get; set; }
public Int32? HeightCM { get; set; }
public Int32? WidthCM { get; set; }
public Int32? DepthCM { get; set; }
[Required(ErrorMessage = "Please enter a list of keywords. Seperate each with a comma.")]
public String Keywords { get; set; }
public String SKU { get; set; }
public Int32 ProductStateID { get; set; }
}
}
2)이 POCO 클래스의 인스턴스를 업데이트하는 내 상황 : -
using System; using System.Collections.Generic; using System.Linq;
using System.Text;
using Trust.Domain.Entities; using Trust.Domain.Abstract;
namespace Trust.Domain.Contrete {
public class EFProductRepository : IProductRepository
{
private EFDbContext context = new EFDbContext();
public IQueryable<Product> Products
{
get { return context.Products; }
}
public Product GetProduct(int productID)
{
Product product = context.Products.Where(p => p.ProductID == productID).FirstOrDefault();
return product;
}
public void SaveProduct(Product product)
{
if (product.ProductID == 0)
{
context.Products.Add(product);
context.SaveChanges();
}
else
{
//context.AttachTo("Product", product);
//var contactEntry = Context.ObjectStateManager.GetObjectStateEntry(product);
//contactEntry.ChangeState(EntityState.Modified);
//_context.SaveChanges();
//var findProduct = GetProduct(product.ProductID);
//context.ApplyCurrentValues("Product", product);
//context.SaveChanges();
context.Products.Attach(product);
context.SaveChanges();
}
}
public void DeleteProduct(Product product)
{
context.Products.Remove(product);
context.SaveChanges();
}
}
}
3) EFDbContext는 다음과 같이 정의된다 : -
using System; using System.Collections.Generic; using System.Linq;
using System.Text;
using System.Data.Entity; // Needs Entity Framework 4.1 project
reference. using System.Data.Entity.ModelConfiguration.Conventions;
using Trust.Domain.Entities;
namespace Trust.Domain.Contrete {
public class EFDbContext : DbContext
{
#region " Overrides "
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
base.OnModelCreating(modelBuilder);
}
#endregion
#region " Entities "
public DbSet<Product> Products { get; set; }
#endregion
}
}
SaveProduct 루틴에서 ProductID가 0이 아닌지 확인합니다. 0이 아니면 데이터베이스의 엔터티를 업데이트하려고합니다. 이 코드에서는이 작업을 수행하는 세 가지 방법을 제시합니다. 처음 두 개는 사용하는 멤버가 존재하지 않기 때문에 컴파일하지 않기 때문에 주석 처리됩니다! 세 번째는 좋아 보이고 실행되며 전혀 데이터베이스를 변경하지 않습니다.
엔티티 프레임 워크는 다양하고 복잡하며 엔지니어링 된 기술이므로 다양한 방법으로 작업 할 수 있습니다. 누군가가 내가 만든 POCO 유형과 EFDbContext 기반 컨텍스트를 바탕으로 내 Product 엔티티를 업데이트하는 방법을 알려주실 수 있습니까? 내가하려고하는 일은 놀라 울 정도로 단순해야하며 왜 그렇지 않은지 나는 알지 못한다.
감사합니다. 그것은 그것을 해결했습니다. Entity Framework에는 많은 변형이 있습니다. 당신은 어떤 변형이 존재하는지, 어떻게 다른지, 어떻게 사용 하는지를 명시한 좋은 자원에 대해 알고 있습니까? 원래 EF는 마이크로 소프트의 훌륭한 아이디어 중 하나 였지만 그 이후로는 엉망이 된 것 같습니다. –
두 가지 변종이 있습니다. DbContext API에 대한 다음 두 책을 확인하십시오. [프로그래밍 EF : 코드 우선] (http://www.amazon.com/Programming-Entity-Framework-Code-First/dp/1449312942/ref=sr_1_1?ie=UTF8&qid=1330895597&sr= 8-1), [Programming EF : DbContext] (http://www.amazon.com/Programming-Entity-Framework-Julia-Lerman/dp/1449312969/ref=sr_1_2?ie=UTF8&qid=1330895597&sr=8-2) –