Can private setters be used in an entity model?

2020-02-13 08:49发布

I'm just starting out with Entity Framework and I'm concerned about the ease with which a primary key can be overridden. I know I can protect this model in my controller (I'm using WebAPI with ASP.NET MVC 5), but I am wondering if it is possible to prevent anyone setting the ID of my model from the model itself via annotations or something?

Basically can I do this:

public int ID { get; private set; }

or something similar, in an EF6 model?

If this is easily found through Google then I don't know the terms to search. I've not been able to find anything that really answers this.

1条回答
▲ chillily
2楼-- · 2020-02-13 09:15

Yes you can, and it should work just fine. Per this blog post by Julie Lerman (who's Microsoft's Entity Framework MVP, so I highly recommend that you read her blog on your journey through EF!):

Entity Framework requires a parameterless constructor in order to materialize objects returned from queries (or loading). I have made this concession in my class but notice that it is a private constructor. So I’m still protecting my class. Nobody can access it. But EF is still able to populate this class when I execute queries. And no, I’m not doing some magic to tell EF to use my public constructor. It really uses the private constructor.

查看更多
登录 后发表回答