gpt4 book ai didi

c# - 没有基类的 EntityFramework 和 TPT

转载 作者:太空宇宙 更新时间:2023-11-03 16:20:48 25 4
gpt4 key购买 nike

我们正在使用 C# MVC .NET4。 EF5(代码优先)。

我们正在尝试构建一个系统,该系统应动态允许用户将额外属性“附加”到任何实体。

假设我们有 ProductClass 和 Products。我们为每个实体都有一些“标准”字段,但用户可能决定将任意属性添加到任何记录,作为键值对,比如说产品 123 有“StockMax”=“10”。

由于我们有许多实体 (+10) 可能具有“附加”属性,我们将创建单个“AttachedProperty”实体/类(在 SQL 中将转换为具有 PK={ParentTable, ParentId, PropertyKey} 的表) .这样我们就可以为所有实体的附加属性保留一个类(这对构建用户界面很有好处)。

我发现我可以通过拥有一个基类在 EF 中实现这一点:

class EntityWithAttachableProperty { 
public System.Guid Id {get;set;}
public ICollection<MyProperty> MyProperties {get;set;}
}

然后从那个类继承到我的实体,比如:

 class Product : EntityWithAttachableProperties { 
public string name {get;set;}
etc
}

我的问题是我不想为此使用继承。我将被迫在逻辑上对并不真正相关的事物进行分组。我还会在 SQL 中获得一个我不需要的巨大 EntityWithAttachableProperties 表。

那么,有没有不用基类就可以完成TPT的方法呢? (也许通过模型构建器)。这样我就会得到这样的类(class):

class Product { 
public System.Guid Id {get;set;}
public string name {get;set;}
public ICollection<MyProperty> MyProperties {get;set;}
etc
}

class ProductClass {
public System.Guid Id {get;set;}
public string Classname {get;set;}
public ICollection<MyProperty> MyProperties {get;set;}
etc
}

请注意,当我执行此操作时,EF 会尝试将 Product_Id 和 ProductClass_Id 添加到 MyProperties 表中。

最佳答案

如果您使用 Fluent 定义 ID 列的映射,它是否有效?我怀疑 EF 是否允许您定义它,但由于它是一种非标准方法,因此它不会假设您在这里尝试做什么(因此尝试映射到单独的 ID 列)。在你的 DbContext 类中有这样的东西(我知道这是不正确的,有人可能会改进):

modelBuilder.Entity<Product>()
.HasMany(o=>o.MyProperty)
.Map(o=>o.MapKey("Id"));

关于c# - 没有基类的 EntityFramework 和 TPT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13973385/

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