Entity Framework: Setting a Foreign Key Property

2019-01-10 23:39发布

We have a table that looks roughly like this:

CREATE TABLE Lockers 
{
  UserID int NOT NULL PRIMARY KEY (foreign key),
  LockerStyleID int (foreign key),
  NameplateID int (foreign key)
}

All of the keys relate to other tables, but because of the way the application is distributed, it's easier for us to pass along IDs as parameters. So we'd like to do this:

Locker l = new Locker { 
  UserID = userID, 
  LockerStyleID = lockerStyleID, 
  NameplateID = nameplateID 
};
entities.AddLocker(l);

We could do it in LINQ-to-SQL, but not EF?

6条回答
2楼-- · 2019-01-11 00:05

What I've been doing to make things easy is adding the foreign key property myself in the partial class:

public int UserID
{
   get
   {
      if (this.User != null)
         return this.User.UserID;
   }
   set 
   {
      this.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", value);
   }
}
查看更多
我命由我不由天
3楼-- · 2019-01-11 00:11

another method if you don't mind 'polluting' you db schema is to add a computed column, e.g. if you had a foreign key field FK_Customer you could define a new computed column FK_Customer_Computed which has the expression FK_Customer. When you generate\update your edmx model the field will appear like a regular field that you can then reference from you entity object.

Or wait for EF4 :)

查看更多
欢心
4楼-- · 2019-01-11 00:16

This missing feature seems to annoy a lot of people.

  • Good news: MS will address the issue with .NET 4.0.
  • Bad news: for now, or if you're stuck on 3.5 you have to do a little bit of work, but it IS possible.

You have to do it like this:

Locker locker = new Locker();
locker.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", userID);
locker.LockerStyleReference.EntityKey = new EntityKey("entities.LockerStyle", "ID", lockerStyleID);
locker.NameplateReference.EntityKey = new EntityKey("entities.Nameplate", "ID", nameplateID);
entities.AddLocker(locker);
entities.SaveChanges();
查看更多
再贱就再见
5楼-- · 2019-01-11 00:16

Following on from Dylan's answer, Alex James has written a blog on precisely this, explaining the problem in full and how to go about the partial class + property solution.

Faking Foreign Keys - EF3.5

查看更多
爱情/是我丢掉的垃圾
6楼-- · 2019-01-11 00:19

You could make an extension method that constructs the entity based on these ID's.

查看更多
劫难
7楼-- · 2019-01-11 00:20

Using an EntityKey solves your problem ;)

alk.

查看更多
登录 后发表回答