我是C#的学生开发人员。我对使用方法插入数据有疑问。与普通的向一个表插入方法不同,当我尝试向映射表中插入数据时遇到错误。我们如何像这样添加到表中?您有什么建议吗?休闲表是此问题的一个示例。
namespace ImdbEntity.Models
{
[Table("MovieCastRoleMappings")]
public class MovieCastRoleMapping
{
[Key, Column(Order = 0)]
public int fkCastId { get; set; }
[ForeignKey("fkCastId")]
public Cast Cast { get; set; }
[Key, Column(Order = 1)]
public int fkCastRoleId { get; set; }
[ForeignKey("fkCastRoleId")]
public CastRole CastRole { get; set; }
[Key, Column(Order = 2)]
public int fkMovieId { get; set; }
[ForeignKey("fkMovieId")]
public Movie Movie { get; set; }
}
}
EF中的样本方法:
MovieCastRoleMapping mcrm = new MovieCastRoleMapping();
mcrm.fkCastId = 1;
mcrm.fkCastRoleId = 2;
mcrm.fkMovieId = 3;
db.MovieCastRoleMapping.Add(mcrm);
db.SaveChanges();
我的错误:
'属性'fkCastId'是对象键信息的一部分,不能修改。'
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Entity Framework中,当你定义一个类的属性为复合主键的一部分(如你所展示的MovieCastRoleMapping
类),这些属性将被视为只读,因为EF会期望它们在插入时通过构造函数或初始化设置好值,并且之后不再改变。错误信息表明你尝试修改了作为键一部分的属性fkCastId
。
基于你的场景,确保你在创建MovieCastRoleMapping
实例时直接通过构造函数或者初始化语句块设置所有键属性的值,而不是先创建对象再修改键属性。你的代码示例已经是正确的做法,但似乎你在其他地方可能误操作了键属性。以下是正确的插入数据方式:
// 确保在创建对象时直接初始化所有Key属性
MovieCastRoleMapping mcrm = new MovieCastRoleMapping
{
fkCastId = 1,
fkCastRoleId = 2,
fkMovieId = 3
};
db.MovieCastRoleMapping.Add(mcrm);
db.SaveChanges();
如果你遇到问题的地方是在尝试更新这样的实体,请注意,对于复合主键的实体,你应该通过查询数据库获取到该实体的实例,然后修改非键属性,最后保存更改。直接创建新实例并试图修改其键属性是不被允许的,因为这等同于试图改变主键,而主键通常用于唯一标识数据库中的记录,不应该被变更。