【发布时间】:2015-01-07 15:45:34
【问题描述】:
我正在使用 EF5 从现有的数据库结构中生成模型。我将插入/更新/删除存储过程映射到实体。这工作正常。
接下来我想做的是将 UserId 作为参数传递给这些 SP,但不将 UserId 作为基础表中的列(SP 将使用此参数)。我有很多实体。是否有可能以某种方式添加一个属性,即使在从数据库更新模型后也总是会重新添加?
非常感谢
【问题讨论】:
标签: c# entity-framework edmx
我正在使用 EF5 从现有的数据库结构中生成模型。我将插入/更新/删除存储过程映射到实体。这工作正常。
接下来我想做的是将 UserId 作为参数传递给这些 SP,但不将 UserId 作为基础表中的列(SP 将使用此参数)。我有很多实体。是否有可能以某种方式添加一个属性,即使在从数据库更新模型后也总是会重新添加?
非常感谢
【问题讨论】:
标签: c# entity-framework edmx
如果您使用 EDMX 生成实体框架对象模型,则您的类是部分的,您可以向实体的部分类添加属性,这些属性将在数据库重新生成后继续存在。
如果您在 DB 中有一个 ParticularEntity 表并在 EDMX 中引用,您可以在您的项目中添加一个分部类文件 ParticularEntity.Augments.cs(名称供您参考,并且您可以像平常一样拥有多个分部类)并在其中
public partial class ParticularEntity
{
public string UserId { get; set; }
public void DoSomething(string userId)
{
someFunctionThatYouWantToNotBeAnExtension();
}
}
或者,您可以编写一组地图使用的扩展方法。不过,我认为这并不像使用部分扩展 EF 类那样干净。
【讨论】:
EF 创建的实体是部分类,因此您可以使用自定义属性扩展该类
YourEntity.cs //created by EF
public partial class YourEntity
{
public string Name { get; set; }
...
}
YourEntityExtended.cs // created by you
public partial class YourEntity
{
public int Id { get; set; }
}
【讨论】: