after earlier question i'm stil struggling ef code-first;
i have 3 (in example, in practice there more) 1 table uses multiple id's accessing other tables.
i have 2 problems
1: id's shipping , delivery aren't set (remain '0') when saving database. 2: when using dbmigrations index created twice recordid
.index(t => t.recordid), .index(t => t.recordid);
code example:
record class:
public class record { public record() { shipping = new shipping(); delivery = new delivery(); } public int recordid { get; set; } public int shippingid { get; set; } public int deliveryid { get; set; } public virtual shipping shipping { get; set; } public virtual delivery delivery { get; set; } }
shipping class:
public class shipping { public int shippingid { get; set; } public string shippingname { get; set; } public virtual record record { get; set; } }
delivery class:
public class delivery { public int deliveryid { get; set; } public string deliverytext { get; set; } public virtual record record { get; set; } }
context:
public class context : dbcontext { public dbset<record> records { get; set; } public dbset<shipping> shippings { get; set; } public dbset<delivery> deliveries { get; set; } protected override void onmodelcreating(dbmodelbuilder modelbuilder) { modelbuilder.entity<record>() .hasrequired(m => m.shipping) .withrequireddependent(x => x.record) .willcascadeondelete(false); modelbuilder.entity<record>() .hasrequired(m => m.delivery) .withrequireddependent(x => x.record) .willcascadeondelete(false); base.onmodelcreating(modelbuilder); }
main program (method):
using (context context = new context()) { var model = context.records.create(); var shipping = model.shipping; shipping.shippingname = "testcontext"; var delivery = model.delivery; delivery.deliverytext = "customtext"; context.entry(model).state = entitystate.added; context.savechanges(); }
main program (second try)
using (context context = new context()) { var model = context.records.create(); model.shipping = context.shippings.create(); var shipping = model.shipping; shipping.shippingname = "testcontext"; model.delivery = context.deliveries.create(); var delivery = model.delivery; delivery.deliverytext = "customtext"; context.entry(model).state = entitystate.added; context.savechanges(); }
to avoid index, don't specify key fields in record class. default identity behaviour name key fields id
public class record { public record() { shipping = new shipping(); delivery = new delivery(); } public int id { get; set; } public virtual shipping shipping { get; set; } public virtual delivery delivery { get; set; } }
Comments
Post a Comment