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

C# 首先使用EF数据库从没有主键的表中删除数据,c#,entity-framework,C#,Entity Framework,我正在开发EF数据库的第一个应用程序,遇到了从没有主键的表中删除记录的情况 我无法控制数据库,也无法为DB表添加任何键 我能采取的最佳方法是什么?最佳方法是,您需要添加主键 为什么EF需要您添加PK? 因为,PK是标识表中行的唯一方法,如果不存在PK,表中可能有许多相同的行如果有PK,则不同,PK是唯一的,每一行都会不同,因此如果要删除或更新,您的目标是哪一行?如果PK不存在,EF不知道如何标识该行,因此表中必须有PK 如果您不能添加一个,可能是数据库来自客户,您没有权限,您可以更改EF和DB之

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

我无法控制数据库,也无法为DB表添加任何键


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

最佳方法是,您需要添加主键

为什么EF需要您添加PK? 因为,PK是标识表中行的唯一方法,如果不存在PK,表中可能有许多相同的行如果有PK,则不同,PK是唯一的,每一行都会不同,因此如果要删除或更新,您的目标是哪一行?如果PK不存在,EF不知道如何标识该行,因此表中必须有PK


如果您不能添加一个,可能是数据库来自客户,您没有权限,您可以更改EF和DB之间的映射XML文件,为唯一的表列添加一个relate PK元素。

我不确定此解决方案是否首先适用于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;
        }
    }
}
这是一篇关于