C# 实体的EF CF只读版本
我正在寻找一种方法来创建一个只读(或不可变)版本的实体,我将使用它作为引用对象。 e、 g 在上述示例中,产品应用作参考数据。i、 e.不得使用订单中产品作为参考的代码修改产品 现在,我意识到一种强制执行的方法是让所有的设定者都是私有的,没有人能够改变产品C# 实体的EF CF只读版本,c#,.net,entity-framework,ef-code-first,readonly,C#,.net,Entity Framework,Ef Code First,Readonly,我正在寻找一种方法来创建一个只读(或不可变)版本的实体,我将使用它作为引用对象。 e、 g 在上述示例中,产品应用作参考数据。i、 e.不得使用订单中产品作为参考的代码修改产品 现在,我意识到一种强制执行的方法是让所有的设定者都是私有的,没有人能够改变产品 class ProductReadOnly { public int ProductId { get; private set; } public string Name { get; private set; } p
class ProductReadOnly
{
public int ProductId { get; private set; }
public string Name { get; private set; }
public string Category { get; private set; }
}
但在我的应用程序中,我希望管理员能够创建/修改产品。因此,我可以使用类产品(使用公共setter)
现在问题是(假设我能够使用table属性将Product&ProductReadOnly映射到Product表)
无需像您的解决方案那样保留两个实体。您可以覆盖上下文中的保存更改,并禁用/启用此类产品的编辑/添加
public override int SaveChanges()
{
if(currentUserIsNotAnAdmin){
var entries= ObjectStateManager.GetObjectStateEntries(EntityState.Added |
EntityState.Modified).OfType<Product>() ;
foreach(entry in entries){//or throw an error here
this.Entry(entry).State=System.Data.EntityState.Unchanged
}
}
return base.SaveChanges();
}
public override int SaveChanges()
{
如果(CurrentUserIsNotaAdmin){
var entries=ObjectStateManager.GetObjectStateEntries(EntityState.Added |
EntityState.Modified)。of type();
foreach(entry in entries){//或在此处抛出错误
this.Entry(Entry).State=System.Data.EntityState.Unchanged
}
}
返回base.SaveChanges();
}
在这里,如果当前用户不是管理员,我已禁用保存产品实体的更改。或者,如果有任何类型为
产品的条目被修改/添加,您可能会抛出一个错误。尝试通过google或Stackoverflow搜索,您将看到许多类似的问题和答案。这看起来是正确的,但感觉是解决问题的错误方法。谢谢。我希望这是基于应用程序的功能,而不是依赖于登录的用户。我正试图找出一个基于设计的解决方案,可以全面应用。
public override int SaveChanges()
{
if(currentUserIsNotAnAdmin){
var entries= ObjectStateManager.GetObjectStateEntries(EntityState.Added |
EntityState.Modified).OfType<Product>() ;
foreach(entry in entries){//or throw an error here
this.Entry(entry).State=System.Data.EntityState.Unchanged
}
}
return base.SaveChanges();
}