小编Ser*_*sev的帖子

EntityFramework(CodeFirst)继承映射:TPT和TPC的混合

我们正在遗留数据库上创建一个EntityFramework CodeFirst DAL (这意味着我们大多数时候都遇到了它的设计错误).

域模型(非常)简单:我们有抽象卡,子类型为HomeCard,CarCard,OwnerCard和RenterCard.确切地说:

abstract class Card {}
class HomeCard: Card {}
class CarCard: Card {}
class OwnerCard: Card {}
class RenterCard: Card {}
Run Code Online (Sandbox Code Playgroud)

数据库模型遵循表格卡片,家庭,汽车,所有者和租用者,其中卡片包含公共列,其他表格包含与特定类别相关的列.这正是TPT的意思,它完美映射到EntityFramework.

在重构之后,我们发现(并非出乎意料)Home和Car确实共享了一些属性,而Owner和Renter也是这样做的.并且它不仅仅是为了美观,而且一些功能将更容易实现(例如按名称搜索所有者租用者,或者由所有者搜索家庭卡片).所以我们希望我们的域模型看起来像这样:

abstract class Card {}
abstract class ProperyCard: Card {}
class HomeCard: ProperyCard {}
class CarCard: ProperyCard {}
abstract class PersonCard: Card {}
class OwnerCard: PersonCard {}
class RenterCard: PersonCard {}
Run Code Online (Sandbox Code Playgroud)

但是我们仍然有相同的数据库模型,这意味着我们在TPT和TPC之间有一些奇怪的组合.我们通过EF/CodeFirst映射它的所有尝试都失败了.有关使它工作的任何建议吗?

PS我们的基本表卡,确实有一个鉴别器字段,如果这可能有任何帮助.

.net entity-framework table-per-type table-per-class

5
推荐指数
1
解决办法
958
查看次数

从List <MyType>到IEnumerable <MyType>返回List <MyType>的转换无效,为什么?

所以基本上我有这个方法.

public List<Customer> FilterCustomersByStatus(List<Customer> source, string status)
{
    return (List<Customer>)source.Where(c => c.Status == status);
}
Run Code Online (Sandbox Code Playgroud)

我抛出一个它无法投射的错误:

无法将类型为'WhereListIterator`1 [AppDataAcces.Customer]'的对象转换为'System.Collections.Generic.List`1 [AppDataAcces.Customer]'.

为什么...?由于底层类型是相同的,Enumerable.Where是否创建了WhereListIterator的新实例,如果是这样,为什么有人会这样做,因为这是不必要的性能和功能损失,因为我总是要创建一个新列表(.ToList( ))

.net c# linq ienumerable

5
推荐指数
1
解决办法
2695
查看次数

从 C# 中的命令获取 int 值

string sql = "Select UserId From User where UserName='Gheorghe'";


SqlCommand cmd=new SqlCommand(sql, connection);
cmd.ExecuteScalar(); //this statement return 0
Run Code Online (Sandbox Code Playgroud)

但我想获取用户的ID?我怎么才能得到它?

c# sql

5
推荐指数
1
解决办法
2万
查看次数

SlowCheetah 没有为 EntityFramework 迁移进行转换

我使用EF代码优先迁移: https://msdn.microsoft.com/en-us/data/jj591621.aspx add-migrationupdate-database等全部由包管理器控制台VS.叫

我还使用 SlowCheetah 来管理我们拥有的各种环境,特别是包括管理每个开发人员都有自己的数据库副本这一事实,以便他们可以更新他们的模型更改,而无需将其他人锁定在数据库之外。因此,更改的配置值之一是目标数据库名称。

(出于我不会介绍的原因,我们不使用connectionStrings .config此类设置,而是将 DB 名称放在appSettings块中)

我的包含模型和迁移的TheCustomer.Database项目是项目。

如果我手动更改 中的appSettingTheCustomer.Database/app.config并运行迁移,它会正确使用配置值 - 所以配置基本上是有效的。

但是如果我设置一个 SlowCheetah 转换来修改给定构建配置的值,选择该配置,重建代码,然后运行迁移,那么它不会应用转换;它使用 base 中的值app.config,而不是app.SelectBuildConfig.config

SlowCheetah 总体上运行良好 - 当我运行 sln 来获取网站时,它使用了由 VS Build Config 确定的正确 Db。

有什么想法吗?

编辑:

配置文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>

    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
  <appSettings>
    <add key="DbName" value="This Default …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework slowcheetah

5
推荐指数
1
解决办法
280
查看次数

C#程序中的SQL查询

有可能成为一个where var1!=var2?因为当我尝试编译时说它是一个无效的运算符.(我也试过NOT IS).

完整的错误消息:

Invalid use of '.', '!', or '()'. in query expression
        'emp_course.e_id!=employee.e_id'
Run Code Online (Sandbox Code Playgroud)

sql

0
推荐指数
1
解决办法
118
查看次数