1
내 프로젝트에서 우리는 데이터 액세스를위한 ORM으로 petapoco를 사용하고 있습니다. 그러나 일대 다 관계가있는 데이터를 삭제하는 동안 몇 가지 어려움에 직면 해 있습니다. 사용자 및 그룹이라는 두 개의 테이블이 있습니다. 여기서 한 사용자는 두 개 이상의 그룹 구성원이 될 수 있습니다. 그래서 사용자와 그룹 테이블은 프로젝트에서 별도의 모델로 노출되지 않은 UserGroup이라는 다른 테이블을 사용하여 관련됩니다. 그렇다면 어떻게 petapoco를 사용하여 그룹에서 사용자를 삭제할 수 있습니까? 이일대 다 관계가있는 동안 데이터를 삭제하는 Petapoco?
[TableName("User")]
[PrimaryKey("UserId")]
[ExplicitColumns]
public class User
{
[Column("UserId")]
public int Id { get; set; }
[Column]
[Required]
public Guid Identifier { get; set; }
[Column("UserStatusId")]
[Required]
public UserStatus UserStatus { get; set; }
[Column("RoleId")]
[Required]
public Role Role { get; set; }
[Column]
public int? SchoolId { get; set; }
[Column]
public int? LanguageId { get; set; }
[Column]
public int? LevelId { get; set; }
[Column("TitleId")]
public Title Title { get; set; }
[Column]
public int? GenderId { get; set; }
[Column]
[Required]
[StringLength(35)]
public string Username { get; set; }
[StringLength(100)]
public string Password { get; set; }
[Column]
[StringLength(100)]
public string PasswordEncrypted { get; set; }
[Column]
[StringLength(10)]
public string PasswordSalt { get; set; }
[Column]
//[Required]
[DataType(DataType.EmailAddress)]
[StringLength(255)]
public string Email { get; set; }
[Column]
[Required]
[StringLength(35)]
public string FirstName { get; set; }
[Column]
[Required]
[StringLength(35)]
public string LastName { get; set; }
public string FullName
{
get
{
return string.Concat(FirstName, " ", LastName);
}
}
public string FormalName
{
get
{
if ((int)Title != 0)
{
return string.Concat(Title, " ", LastName);
}
else
{
return LastName;
}
}
}
[Column]
public DateTime? DateOfBirth { get; set; }
[Column]
public bool Subscribed { get; set; }
[Column]
public bool TermsAgreed { get; set; }
[Column]
public DateTime? TermsAgreedDate { get; set; }
[Column]
public DateTime CreatedDate { get; set; }
[Column]
public DateTime ModifiedDate { get; set; }
[Column]
public DateTime? LoginDate { get; set; }
public School School { get; set; }
public Gender Gender { get; set; }
public Language Language { get; set; }
public Level Level { get; set; }
public IList<Group> Groups { get; set; }
}
내 그룹 모델은 사람이 나에게 도움을 줄 말라 내가이
/// <summary>
/// Delete users from groups
/// </summary>
/// <param name="userIds">user Id list</param>
/// <param name="groupId">group Id</param>
public void DeleteUsersFromGroup(List<int> userIds, int groupId)
{
using (Database db = this.GetDatabase())
{
var sql = Sql.Builder.Append(
@"DELETE [UserGroup]
LEFT OUTER JOIN [User] ON [UserGroup].[UserId] = [User].[UserId]
WHERE [UserGroup].[UserId] IN (@0) AND [UserGroup].[GroupId] = @1",
userIds,
groupId);
db.Query<User>(sql);
}
}
처럼 삭제를 수행 한 모든이
[TableName("Group")]
[PrimaryKey("GroupId")]
[ExplicitColumns]
public class Group
{
[Column("GroupId")]
public int Id { get; set; }
[Column]
public int OwnerUserId { get; set; }
[Column]
public string Name { get; set; }
[Column]
public DateTime CreatedDate { get; set; }
[Column]
public DateTime ModifiedDate { get; set; }
public User OwnerUser { get; set; }
public IList<User> Users { get; set; }
}
모양처럼
내 사용자 모델은 보인다 이걸 해결하는거야? 대신 당신이 db.Execute을 사용할 것 db.Query를 사용
, 왜 당신은'User' 테이블에 합류? 그곳에 합류하는 것이 필요하다고 생각하지 않습니다. –
단지 delete sql을 실행하고 execute 메소드에 전달하십시오. 예. groupid = @ 0이고 userid가 (@ 1) 인 usergroup에서 삭제 – Schotime