gpt4 book ai didi

entity-framework-5 - 有没有办法在调用 EdmxWriter.WriteEdmx 时忽略某些实体属性

转载 作者:行者123 更新时间:2023-12-02 09:34:26 24 4
gpt4 key购买 nike

我专门使用 breezejs,breeze js 的服务器代码将 dbcontext 转换为可在客户端使用 EdmxWriter.WriteEdmx 的形式。我向许多属性添加了 JsonIgnore 特性,这样它们就不会传递到客户端。但是,从 EdmxWriter.WriteEdmx 生成(并传递到客户端)的元数据仍然具有这些属性。是否有任何其他属性可以添加到我想忽略的那些属性中,以便它们被 EdmxWriter.WriteEdmx 忽略?或者,我是否需要制作一个单独的方法,以免产生任何其他意外的副作用。

最佳答案

您可以使用仅用于元数据生成的更具限制性的变体对 DbContext 进行子类化。您可以继续使用您的基础上下文以实现持久性目的。

DocCode 示例通过其 NorthwindMetadataContext 说明了此技术。这从元数据中隐藏了 UserSessionId 属性。

这只是一些额外的代码行。

public class NorthwindMetadataContext : NorthwindContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

// Hide from clients
modelBuilder.Entity<Customer>().Ignore(t => t.CustomerID_OLD);

// Ignore UserSessionId in metadata (but keep it in base DbContext)
modelBuilder.Entity<Customer>().Ignore(t => t.UserSessionId);
modelBuilder.Entity<Employee>().Ignore(t => t.UserSessionId);
modelBuilder.Entity<Order>().Ignore(t => t.UserSessionId);
// ... more of the same ...
}
}

Web API Controller 委托(delegate)给 NorthwindRepository您会在其中看到 Metadata 属性从 NorthwindMetadataContext 获取元数据,而其他存储库成员引用 EFContextProvider 以获得完整的 NorthwindContext

public class NorthwindRepository
{
public NorthwindRepository()
{
_contextProvider = new EFContextProvider<NorthwindContext>();
}

public string Metadata
{
get
{
// Returns metadata from a dedicated DbContext that is different from
// the DbContext used for other operations
// See NorthwindMetadataContext for more about the scenario behind this.
var metaContextProvider = new EFContextProvider<NorthwindMetadataContext>();
return metaContextProvider.Metadata();
}
}

public SaveResult SaveChanges(JObject saveBundle)
{
PrepareSaveGuard();
return _contextProvider.SaveChanges(saveBundle);
}

public IQueryable<Category> Categories {
get { return Context.Categories; }
}
// ... more members ...
}

很聪明,嗯?

请记住,UserSessionId 仍在服务器端类模型中,并且可以由恶意客户端的 saveChanges 请求设置。 DocCode 在其 SaveChanges 验证处理中防范这种风险。

关于entity-framework-5 - 有没有办法在调用 EdmxWriter.WriteEdmx 时忽略某些实体属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28507620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com