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