Can*_*tro 6 c# oracle entity-framework
我第一次使用Entity Framework,我正在尝试使用集合创建一个对象(我希望集合中的所有对象也可以在数据库中创建)但是我有一些外键违规.
我的样本表:
table APPOINTMENTS: ID, VAR1, DATE_APPOINTMENT
table GUESTS: ID, APPOINTMENT_ID, USER_ID, VAR2, VAR3
Run Code Online (Sandbox Code Playgroud)
我的测试代码:
DomainService aux = new DomainService();
APPOINTMENTS appointment = new APPOINTMENTS();
appointment.VAR1 = "BLA";
appointment.DATE_APPOINTMENT = new DateTime();
//The user with id = 1 is already created in the database
appointment.GUESTS.Add(new GUESTS { USER_ID = 1, VAR2 = 1, VAR3 = "F" });
aux.InsertAppointment(appointment);
Run Code Online (Sandbox Code Playgroud)
在DomainService,我有:
public void InsertAppointment(APPOINTMENTS appointment)
{
using (var context = this.ObjectContext)
{
context.AddToAPPOINTMENTS(appointment);
context.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:{"ORA-02291:违反完整性约束(FK_GUESTS_APPOINTMENTS) - 未找到父密钥"}
我究竟做错了什么?
更新: 要在数据库中创建ID,我在插入前使用每个表的序列和触发器来获取下一个值.当我创建单个对象时,例如没有来宾的约会,它会插入数据库并生成id.
这个问题的解决办法:
“从序列生成的 ID 字段将无法正确处理。保存实体后,ID 将返回为 0。我将通过手动破解 SSDL(在文本编辑器中打开 .edmx 文件)来修复此问题ID 字段上的 StoreGeneeratedPattern="Identity" 属性(第 6 行和第 16 行)。请注意,设计人员可能会在将来修改时删除该更改。
虽然我认为这不是绝对必要的,但修改某些类型元数据也可能是谨慎的做法,例如在适用的情况下将 SSDL 中的“number”更改为“int”,将 CSDL 中的“Decimal”更改为“Int32”。通常这些不会自动生成所需的值,尤其是使用 XE 时。”
@http://www.chrisumbel.com/article/oracle_entity_framework_ef