我正在使用EF数据库第一个应用程序,我遇到了从没有主键的表中删除记录的情况。
我无法控制数据库,也无法为数据库表添加任何密钥。
我可以采取的最佳方法是什么?
答案 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
的博客文章