두 개의 엔터티로 분할 된 테이블 행을 삭제하려고합니다. 나는 주요 엔티티를 삭제하려고하면 내가 context.Entry(...).Reference
를 사용하여 관련된 다른 개체를로드하지 전에 만약 내가 때여러 엔터티에서 분할 된 테이블 행을 삭제하는 중 오류가 발생했습니다.
, 나는
전에 관련 기관을 검색하기 위해 조금 바보입니다 .. 오류가 전체 행을 삭제 하시겠습니까? 내가 만난context.Entry(...)
라인
잘못된 데이터를 주석 계속 경우
나는 다음과 같은 오류가 발생했습니다. 필요한 관계가 누락되었습니다. 상태 항목을 검토하여 제약 조건 위반의 출처를 확인하십시오.
다음 코드를 추가합니다. 누군가 이전에 관련 항목을 "로드"할 필요없이 분리 된 항목을 삭제하는 것을 도와 줄 수 있습니까?
using System.Data.Entity;
using System.Linq;
namespace Split
{
class Program
{
static void Main(string[] args)
{
using (var context = new DataContext())
{
var product = new Product()
{
Name = "my Article",
Photo = new ProductPhoto() { PhotoUrl = "http://myfoto.jpg" }
};
context.Products.Add(product);
context.SaveChanges();
}
using (var context = new DataContext())
{
var product = context.Products.First();
//context.Entry(product).Reference(e => e.Photo).Load();
context.Products.Remove(product);
context.SaveChanges();
}
}
}
class Product
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ProductPhoto Photo { get; set; }
}
class ProductPhoto
{
public virtual int ProductId { get; set; }
public virtual string PhotoUrl { get; set; }
public virtual Product Product { get; set; }
}
class DataContext : DbContext
{
public DataContext()
: base("name=DefaultConnection")
{
Configuration.ProxyCreationEnabled = false;
Configuration.LazyLoadingEnabled = false;
}
public DbSet<Product> Products { get; set; }
public DbSet<ProductPhoto> ProductPhotos { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>()
.ToTable("Products")
.HasKey(e => e.Id)
.HasRequired(e => e.Photo)
.WithRequiredPrincipal(e => e.Product);
modelBuilder.Entity<ProductPhoto>()
.ToTable("Products")
.HasKey(e => e.ProductId);
base.OnModelCreating(modelBuilder);
}
}
}