首先使用EF数据库从没有主键的表中删除数据

时间:2014-06-17 05:55:31

标签: c# entity-framework

我正在使用EF数据库第一个应用程序,我遇到了从没有主键的表中删除记录的情况。

我无法控制数据库,也无法为数据库表添加任何密钥。

我可以采取的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

最好的方法是,您需要添加主键。

为什么EF需要你添加PK? 因为,PK是识别表中行的唯一方法,如果不存在PK,表可能有很多相同的行(如果有PK,它不同,PK是唯一的,每行会不同) ,所以如果你想删除或更新,哪一行是你的目标?如果不存在PK,EF不知道如何识别行,所以你必须在表中有PK。

如果您无法添加一个(可能是来自客户的数据库,您没有权限),您可以更改EF和DB之间的映射XML文件,添加相关的PK元素一个独特的表格列。

答案 1 :(得分:0)

我不确定此解决方案是否首先适用于ef数据库,但您可以进行测试。而实体没有主键 您可以使用其他字段进行比较。只需覆盖GetHashCode方法。这是一个例子:

public class Organisation
{
    public string Name { get; set; }
    public string Country { get; set; }

    public override int GetHashCode()
    {
        unchecked
        {
            int multiplier = 31;
            int hash = GetType().GetHashCode();

            hash = hash * multiplier + (Name == null ? 0 : Name.GetHashCode());
            hash = hash * multiplier + (Country == null ? 0 : Country.GetHashCode());

            return hash;
        }
    }
}

这是一篇关于Entity Framework with overriding methods GetHashCode and Equals

的博客文章