gpt4 book ai didi

javascript - Breeze.js/NET+EF复杂对象行为比较奇怪

转载 作者:行者123 更新时间:2023-11-28 08:43:47 27 4
gpt4 key购买 nike

我正在开发一个自定义数据访问层,以便在 Breeze.js 中使用我拥有的:该模型: 公开课产品 { [ key ] 公共(public) int ProductId { 获取;放; } 公共(public)字符串 UPC { 获取;放; } 公共(public)字符串名称{获取;放; } 公共(public)小数 MsrpPrice { 获取;放; } 公共(public) int 数量 { 获取;放; }

    public virtual ICollection<ProductFeature> Features { get; set; }
public virtual B2BCategory InB2BCategory { get; set; }
public virtual ICollection<ImageDescriptor> Images { get; set; }

public int CategoryId {get; set;}

} 公共(public)类产品功能 { 公共(public) int ProductId { 获取;放; } 公共(public)字符串名称{获取;放; } 公共(public)字符串组名 { get;放; } 公共(public)字符串操作{获取;放; } 公共(public)十进制值 { 获取;放; } }

public class ImageDescriptor
{
public int ProductId { get; set; }
public string Uri { get; set; }
public DateTime Updated { get; set; }
public bool IsDefault { get; set; }
}

上下文提供者: 公共(public)类 ProductContextProvider : ContextProvider { 私有(private)只读 ProductRepository repo =new ProductRepository();

    public IQueryable<B2BCategory> Categories
{
get { return repo.Categories.AsQueryable(); }
}

public IQueryable<Product> Products
{
get
{
return repo.Products.OrderBy(p => p.ProductId).AsQueryable();
}
}

protected override string BuildJsonMetadata()
{
var contextProvider = new EFContextProvider<ProductMetadataContext>();
return contextProvider.Metadata();
}

protected override void SaveChangesCore(SaveWorkState saveWorkState)
{…
}

// No DbConnections needed
public override IDbConnection GetDbConnection()
{
return null;
}

protected override void OpenDbConnection()
{
// do nothing
}

protected override void CloseDbConnection()
{
// do nothing
}
}

internal class ProductMetadataContext : DbContext
{
static ProductMetadataContext()
{
Database.SetInitializer<ProductMetadataContext>(null);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ProductFeatureConfiguration());
modelBuilder.Configurations.Add(new ImageDescriptorConfiguration());
}

public DbSet<Product> Products { get; set; }
public DbSet<B2BCategory> Categories { get; set; }
}

internal class ImageDescriptorConfiguration : EntityTypeConfiguration<ImageDescriptor>
{
public ImageDescriptorConfiguration()
{
// I tried to mess up with key orders
HasKey(i => new { i.Uri, i.ProductId});
}
}

internal class ProductFeatureConfiguration : EntityTypeConfiguration<ProductFeature>
{
public ProductFeatureConfiguration()
{
HasKey(f => new { f.ProductId, f.Name });
}
}

我直接填充产品的功能和图像属性:

 product.Features = new Collection<ProductFeature>();
product.Images = new Collection<ImageDescriptor>();

var imgd = new ImageDescriptor
{
ProductId = product.ProductId,
Updated = DateTime.Now,
Uri = defsmall,
IsDefault = !product.Images.Any()
}
product.Images.Add(imgd);

var pf = new ProductFeature
{
ProductId = product.ProductId,
GroupName = "Size",
Name = size,
Value = size == "Small" ? new decimal(.75):size == "Medium" ? new decimal(1.3):new decimal(1.8),
Operation = "*"
};
product.Features.Add(pf);

例如,每个产品项目总共有 3 个产品功能和 2 个图像。

在客户端我这样查询:返回entityQuery.from('Products').using(EntityManager).execute();

而且......我有一件非常奇怪的事情:images 属性包含一个空数组,features 属性包含一个 5 的数组!元素 – 3 个 ProductFeature 类型和 2 个 ImageDescriptor 类型。我认为这是一个错误 - 你能帮我吗?

最佳答案

我没有看到任何创建 Breeze EntityManager并添加或附加新创建的实体然后保存它们的代码。请查看 BreezeJs 网站的可下载 zip 中的 Breeze 示例。

关于javascript - Breeze.js/NET+EF复杂对象行为比较奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20143641/

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