1

我有一组 DB 对象位于我的主要对象定义的 EntitySet 中。这可以很好地处理添加和更新,但我发现从列表中删除项目不会导致数据库记录被删除,所以我必须在数据存储库对象中创建一个方法来删除记录,因为数据对象没有可以访问正在使用它的数据上下文。

我正在寻找是否可以将此删除带入主对象,并且我找到了关联的 DeleteOnNull 属性,但是当我使用它时,我收到错误“DeleteOnNull 仅适用于映射到不可为空的单例关联成员外键列”。我的代码是:

private EntitySet<UserSite> _userSites = new EntitySet<UserSite>();
[Association(Name = "User_UserSites", Storage = "_userSites", ThisKey = "UserID", OtherKey = "UserID", DeleteOnNull=true)]
public IList<UserSite> UserSites { get { return _userSites; } set { } }

我的用户站点对象是

[Table(Name="UserSite")]
public class UserSite
{
    [Column]//(IsPrimaryKey = true)]
    public int UserID { get; set; }

    [Column]//(IsPrimaryKey = true)]
    public string Site { get; set; }

    [Column]
    public bool DefaultSite { get; set; }

    [Column(IsPrimaryKey = true, AutoSync = AutoSync.OnInsert)]
    public int UniqueID { get; set; }
}

我可以使用 DeleteOnNull 将我的所有数据更新方法保留在我的主用户对象中,还是我必须在存储库级别处理删除?

4

1 回答 1

2

DeleteOnNull 仅适用于单例关联。因此,您可以将其放在 UserSite.User 上,但不能放在 User.UserSites 上。但是,它仍然不像您希望的那样自动。这里有一个例子。

LINQ to SQL 很难推断出你想要的行为,因为它无法猜测你想要组合还是聚合,所以它选择了安全的猜测(聚合)。

于 2009-09-24T18:12:18.893 回答