問題描述
在 ADO.NET 數據服務中添加對查找表的引用 (Adding a reference to a lookup table in ADO.NET Data Services)
I’m attempting to use ADO.NET Data Services to update my database.
Tables:
- Person( PK PersonId; FK EntityRootId)
- EntityRoot( PK EntityRootId, FK EntityTypeId)
- EntityTypes( PK EntityTypeId)
I’m trying to create an EntityRoot (unfortunate name since it may be confused with Entity Framework’s Entity. EntityRoot is in my domain) and add it to the database:
var entRoot = EntityRoot.CreateEntityRoot(
0, "Lou", DateTime.Now, "Lou", DateTime.Now);
var entityType =
(from type in myContext.EntityTypeSet
where (type.Description == "Person")
select type).FirstOrDefault(); // this works fine and returns the entityType I’m looking for
entRoot.EntityType = entityType;
myContext.AddToEntityRootSet(entRoot);
// with the line below I get a runtime error:
// “AddLink and DeleteLink methods only work when the sourceProperty is a collection.”
//myContext.AddLink(entRoot, "EntityType", entityType);
// without the line above I get an error from the save:
// “Entities in 'MyEntities.EntityRootSet' participate in the 'FK_EntityRoots_EntityTypeId_Lookup_EntityTypes'
// relationship. 0 related 'EntityTypes' were found. 1 'EntityTypes' is expected.”
myContext.BeginSaveChanges(SaveChangesOptions.Batch,
new AsyncCallback(OnSaveAllComplete),
null);
How can I add a reference to the entRoot.EntityTypeId field?
Thanks for any insight into this.
參考解法
方法 1:
I think when doing this you should use SetLink instead of AddLink, because the property you are indicating is from Entity to EntityType (an Entity has one EntityType).
This is basically what the error message is telling you (AddLink works only on Collection properties, like the reverse property from type to entity, or for many to many relationships).
方法 2:
Is it just a typo in your question or should it be
myContext.AddLink(entRoot, "EntityTypes", entityType);
At the start of your question you write "EntityTypes" (with and ending "s").
(by Weej、Denis Troller、splattne)