c# - A Dependent Role has multiple principals with different values -
i using enitity framework codefirst , have following design
public class location { public int id { get; set; } public string name { get; set; } public bool isdeleted { get; set; } } public class delieryrate { public int id { get; set; } public int originid { get; set; } public location origin { get; set; } public int destinationid { get; set; } public location destination { get; set; } public double amount { get; set; } public bool isactive { get; set; } }
i not want define relationship on location. when update database, works referential integrity error when run seed code. have tried configure using fluent api follows
modelbuilder.entity<deliveryrate>() .hasrequired(e => e.origin) .withoptional() .willcascadeondelete(false); modelbuilder.entity<deliveryrate>() .hasrequired(e => e.destination) .withoptional() .willcascadeondelete(false);
when attempting update database following error
system.data.entity.infrastructure.dbupdateexception: error occurred while updating entries. see inner exception details. ---> system.data.updateexception: error occurred while updating entries. see inner exception details. ---> system.data.constraintexception: referential integrity constraint violation. dependent role has multiple principals different values. --- end of inner exception stack trace --- @ system.data.mapping.update.internal.tablechangeprocessor.diagnosekeycollision(updatecompiler compiler, propagatorresult change, compositekey key, propagatorresult other) @ system.data.mapping.update.internal.tablechangeprocessor.processkeys(updatecompiler compiler, list
1 changes, set
1 keys) @ system.data.mapping.update.internal.tablechangeprocessor.compilecommands(changenode changenode, updatecompiler compiler) @ system.data.mapping.update.internal.updatetranslator.d__0.movenext() @ system.linq.enumerable.d__711.movenext() @ system.data.mapping.update.internal.updatecommandorderer..ctor(ienumerable
1 commands, updatetranslator translator) @ system.data.mapping.update.internal.updatetranslator.producecommands() @ system.data.mapping.update.internal.updatetranslator.update(ientitystatemanager statemanager, ientityadapter adapter) @ system.data.entityclient.entityadapter.update(ientitystatemanager entitycache) @ system.data.objects.objectcontext.savechanges(saveoptions options) @ system.data.entity.internal.internalcontext.savechanges() --- end of inner exception stack trace --- @ system.data.entity.internal.internalcontext.savechanges() @ system.data.entity.internal.lazyinternalcontext.savechanges() @ system.data.entity.dbcontext.savechanges() @ system.data.entity.migrations.dbmigrator.seeddatabase() @ system.data.entity.migrations.infrastructure.migratorloggingdecorator.seeddatabase() @ system.data.entity.migrations.dbmigrator.upgrade(ienumerable1 pendingmigrations, string targetmigrationid, string lastmigrationid) @ system.data.entity.migrations.infrastructure.migratorloggingdecorator.upgrade(ienumerable
1 pendingmigrations, string targetmigrationid, string lastmigrationid) @ system.data.entity.migrations.dbmigrator.update(string targetmigration) @ system.data.entity.migrations.infrastructure.migratorbase.update(string targetmigration) @ system.data.entity.migrations.design.toolingfacade.updaterunner.runcore() @ system.data.entity.migrations.design.toolingfacade.baserunner.run() error occurred while updating entries. see inner exception details
is there better way model relationship between locations , deliveryrate. making mistake fluent api bit
one-to-one relationships separate foreign keys not supported entity framework. ef maps model shared primary keys, deliveryrate.id
, deliveryrate.origin.id
, deliveryrate.destination.id
must have same value. have not in seed
method cause of exception.
shared primary keys not useful model because never create deliveryrate
has destination
different origin
.
you can solve problem modeling 2 relationships one-to-many:
modelbuilder.entity<deliveryrate>() .hasrequired(e => e.origin) .withmany() .hasforeignkey(e => e.originid) .willcascadeondelete(false); modelbuilder.entity<deliveryrate>() .hasrequired(e => e.destination) .withmany() .hasforeignkey(e => e.destinationid) .willcascadeondelete(false);
Comments
Post a Comment