Asp.net mvc DeleteOnNull错误

Asp.net mvc DeleteOnNull错误,asp.net-mvc,linq-to-sql,entityset,delete-record,Asp.net Mvc,Linq To Sql,Entityset,Delete Record,我在主对象定义的EntitySet中有一组DB对象。这可以很好地处理添加和更新,但我发现从列表中删除项目并不会导致数据库记录被删除,因此我必须在数据存储库对象中创建一个方法来删除记录,因为数据对象无法访问正在使用它的数据上下文 我想看看是否可以将此删除带到主对象中,并找到了关联的DeleteOnNull属性,但当我使用它时,我得到一个错误“DeleteOnNull只能对映射到不可为Null的外键列的单例关联成员为true”。我的代码是: private EntitySet<UserSite

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

我想看看是否可以将此删除带到主对象中,并找到了关联的DeleteOnNull属性,但当我使用它时,我得到一个错误“DeleteOnNull只能对映射到不可为Null的外键列的单例关联成员为true”。我的代码是:

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 { } }
我可以使用DeleteOnNull将所有数据更新方法保留在我的主用户对象中,还是必须在存储库级别处理删除操作?

。所以你可以把它放在UserSite.User上,但不能放在User.UserSites上。不过,它还没有像您希望的那样自动化


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

您已经问了11个问题,没有接受任何答案,并且从未对任何事情进行过投票。如果你想让这里的人花时间回答你的问题,最好是投票选出你认为有用的答案,并接受你认为最有用的答案。对不起,我在这个项目上一直很忙,有时没有时间立即调查/检查答案,在我不记得回去更新qs之后-对不起,我通常会这样做。我已经检查了我所有的Q并更新了它们,但不幸的是其中一些无法完成,或者答案没有提供我需要的信息。谢谢。不过我有点困惑——MS参考说明(据我所知)它只能放在1->1对象关系上,但Dinesh暗示(同样,据我所知——“如果我从Order.OrderDetails集合中删除一个OrderDetails”),它可以用于1->多个关系,或者这是一个稍微无害的措辞?我得到的错误推断它必须是一个1->1,这种情况只是为了澄清-“所以你可以把它放在UserSite.User上”-在这种情况下你会删除用户,对吗?所以我删除User.UserSites记录时有点塞满了表单,除了通过datacontext?(抱歉,如果我的评论有点脱节,试图解决MVC ATM的一大堆问题)谢谢MHRe:1..1 vs.1..*。是的,docs和Dinesh说的确实不同。试试看!关于删除用户,不,您不会删除用户。在他的示例中,User类似于Order,而UserSite类似于OrderDetail。注意他删除了哪一个!我试过了,试图将DeleteOnNull设置为EntitySet会立即出现编译错误。迪内什没有发布他的代码来创建链接,这有点令人沮丧。。。
[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; }
}