WebMatrix 및 EntityFramework와 협력하고 있습니다. , exampl에 대한EntityFramework 속성 InverseProperty는 어떻게 작동합니까?
[Table("Users")]
public class User
{
[Key]
public int UserId { get; set; }
[MaxLength(50), MinLength(5), Required]
public string UserName { get; set; }
[MaxLength(16), MinLength(8), Required]
public string Password { get; set; }
[MaxLength(50), Required]
public string Name{ get; set; }
[MaxLength(50), Required]
public string LasName1{ get; set; }
[MaxLength(50), Required]
public string LasName2{ get; set; }
public string token { get; set; }
public DateTime CreatedDateTime { get; set; }
public DateTime UpdatedDateTime { get; set; }
[InverseProperty("CreatedBy")]
public virtual ICollection<Device> CreatedDevices {get; set;}
[InverseProperty("UpdatedBy")]
public virtual ICollection<Device> UpdatedDevices {get; set;}
[InverseProperty("CreatedBy")]
public virtual ICollection<Cluster> CreatedClusters {get; set;}
[InverseProperty("UpdatedBy")]
public virtual ICollection<Cluster> UpdatedClusters {get; set;}
[InverseProperty("CreatedBy")]
public virtual ICollection<Region> CreatedRegions {get; set;}
[InverseProperty("UpdatedBy")]
public virtual ICollection<Region> UpdatedRegions {get; set;}
}
: 내 데이터베이스에서
나는 사용자 테이블은, 우리의 비즈니스 로직에서 사용자가 작성하거나 다른 테이블의 내용을 업데이트 할 수 있습니다, 그래서 내 모델에서 내 사용자 클래스는 다음과 같이이다 e 내 지역 클래스는 다음과 같습니다.
[Table("Regions")]
public class Region
{
[Key]
public int RegionId { get; set; }
[MaxLength(50), MinLength(5), Required]
public string Name{ get; set; }
public virtual ICollection<Cluster> Clusters { get; set; }
public DateTime CreatedDateTime { get; set; }
public DateTime UpdatedDateTime { get; set; }
public Usuario CreatedBy { get; set; }
public Usuario UpdatedBy { get; set; }
}
이렇게하면 데이터베이스의 엔티티간에 필요한 관계가 만들어집니다. 이제 내 주된 의문이 생깁니다. 클러스터 테이블에 CreatedBy_UserId가 있습니다. 따라서 테이블의 항목을 삽입하거나 업데이트 할 때 User 객체를 전달해야합니까? 나는 이런 식으로 말하고있다
Cluster cluster = new Cluster()
{
RegionId = regionId,
CreatedDateTime = createdDateTime,
UpdatedDateTime = updatedDateTime,
CreatedBy = currentUser,
UpdatedBy = currentUser
};
또는 외래 키를 나타내는 int를 테이블에 어떻게 전달합니까?
죄송합니다. EF에서 작업하기 시작했습니다. 어떤 상황에서 Attach 메서드를 사용해야합니까? Attach에 대한 호출이 제거되면 EF가 새로운 사용자를 만드는 이유는 무엇입니까? 또한 큰 문제는, 만약 내가 항목을 삭제했다면, 내 delete 메소드는 int id를 받고 다음과 같은 방식으로 엔트리를 쿼리한다.'Cluster cluster = (c.db.Clusters의 c에서, c.ClusterId == id select c) .FirstOrDefault();'그런 다음이 파일을 제거합니다. db.Clusters.Remove (cluster); db.SaveChanges();', Inverse Properties를 가지고 있다면 엔트리를 삭제하는이 접근 방식이 효과가 있습니까? –
@UrielArvizu :'Attach'를 호출하면 엔티티가 이미 DB에 있음을 EF에 알립니다. (DB 로의 실제 왕복이없이 DB에서 엔티티를 로딩하는 것과 같은 효과가 있습니다.) '클러스터'에 대해 'Add'를 호출하면 EF는 클러스터 *와 모든 관련 엔티티 *가 첨부되어 있는지 확인합니다. 그렇지 않은 경우 관련 엔터티도 삽입해야한다고 가정합니다. 첨부 된 경우 FK가 기존 사용자 행에 설정됩니다. 클러스터 삭제 방법이 필요합니다. – Slauma
EF와 관련하여 의문 사항이 있으면 감사드립니다. 나는 배우려고 노력 중이며 직접 답을 얻을 수 있다면 좋을 것입니다. 다시 한번 감사드립니다. –