我有以下对象:
public class User {
int Id { get; set; }
string Name { get; set; }
IList<Job> Jobs { get; set; }
}
public class Job {
int Id { get; set; }
DateTime StartTime { get; set; } // other fluff values here
User User { get; set; }
}
我已经在User
和Job
之间设置了多对多关系(因为它是合适的),但我想在创建它们时指定Job.Id
。我可以保证,虽然可能实体不能,但是ID是唯一的,因为它们是另一个系统中另一个表的PK。
以下代码说明了我想要的工作:
var user = db.Users.Create ();
var job = new Job();
job.Id = 42; // id from other service
user.Jobs.Add (job);
db.Users.Add (user);
db.Save ();
为简洁起见,省略了一些代码,如果我省略了必要的内容,请告诉我。我的User
被创建并插入,我的Job
被创建并插入,但Job.Id
是1而不是42。
我错过了什么?
答案 0 :(得分:5)
public class Job {
[DatabaseGenerated(DatabaseGeneratedOption.None)]
int Id { get; set; }
DateTime StartTime { get; set; } // other fluff values here
User User { get; set; }
}
应该做你需要的。
将列上的DatabaseGeneratedAttribute设置为Identity或 Computed强制从中检索列的值 调用SaveChanges时,服务器作为标识或计算值。 类型为时,将从数据源中读取标识属性 首先保存,但之后,它们被假定为不变。计算 每次调用SaveChanges时都会读取属性。 无表示 它不是服务器生成的属性。标识是默认值 使用Code First时整数键属性的值。