Entity framework 实体框架实体拆分为单个POCO

Entity framework 实体框架实体拆分为单个POCO,entity-framework,ef-fluent-api,Entity Framework,Ef Fluent Api,我使用的是EntityFramework6.1.3,我想定义一个POCO类(Subscriber),它从三个SQL表中进行自我分解。我试着跟随各种在线参考资料,包括这一个。以下是表格/模型定义 SQL表 CREATE TABLE [Subscriber] ( [SubscriberId] INT NOT NULL PRIMARY KEY, [Username] NVARCHAR(50) NOT NULL, [Email] NVARCHAR(100) NOT NULL )

我使用的是EntityFramework6.1.3,我想定义一个POCO类(Subscriber),它从三个SQL表中进行自我分解。我试着跟随各种在线参考资料,包括这一个。以下是表格/模型定义

SQL表

CREATE TABLE [Subscriber]
(
    [SubscriberId] INT NOT NULL PRIMARY KEY,
    [Username] NVARCHAR(50) NOT NULL,
    [Email] NVARCHAR(100) NOT NULL
)
CREATE TABLE [SubscriberDetails]
(
    [SubscriberId] INT NOT NULL PRIMARY KEY,
    [FirstName] NVARCHAR(50) NOT NULL,
    [LastName] NVARCHAR(50) NOT NULL,
    CONSTRAINT [FK_SubscriberDetails_Subscriber]
        FOREIGN KEY ([SubscriberId])
        REFERENCES [Subscriber] ([SubscriberId]) ON DELETE CASCADE
)
CREATE TABLE [SubscriberProfile]
(
    [SubscriberId] INT NOT NULL PRIMARY KEY,
    [Bio] NVARCHAR(MAX) NULL,
    CONSTRAINT [FK_SubscriberProfile_Subscriber]
        FOREIGN KEY ([SubscriberId])
        REFERENCES [Subscriber] ([SubscriberId]) ON DELETE CASCADE
)
域模型

public class Subscriber {
    public int SubscriberId { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Bio { get; set; }
};
在我的DataContext OnModelCreating()方法中,我添加了以下代码:

modelBuilder.Entity<Subscriber>()
.HasKey(m => m.SubscriberId)
.Map(m => {
    m.ToTable("Subscriber");
    m.Properties(s => new {
        s.SubscriberId,
        s.UserName,
        s.Email
    });
 })
 .Map(m => {
     m.ToTable("SubscriberDetails");
     m.Properties(s => new {
         s.FirstName,
         s.LastName
     });
 })
 .Map(m => {
     m.ToTable("SubscriberProfile");
     m.Properties(s => new {
         s.Bio
     });
 });
modelBuilder.Entity()
.HasKey(m=>m.SubscriberId)
.Map(m=>{
m、 可转让(“认购人”);
m、 属性(s=>新{
s、 订阅人,
s、 用户名,
s、 电子邮件
});
})
.Map(m=>{
m、 ToTable(“认购详情”);
m、 属性(s=>新{
s、 名字,
s、 姓氏
});
})
.Map(m=>{
m、 ToTable(“认购人档案”);
m、 属性(s=>新{
s、 生物
});
});
在编译和加载时,当我尝试对DataContext运行查询时,会出现以下错误:

System.Data.SqlClient.SqlException:对象名称无效 “dbo.Subscriber21”


有人能告诉我我做错了什么吗?

这是您正在为其创建模型的现有数据库吗?我想知道这个对象名是从哪里来的。我注意到您有一个额外的属性映射(
UserName
),它在
Subscriber
类中不存在,但我猜这是一个输入错误。这是我们需要映射到的现有/遗留数据库。您是对的,我错过了域模型中的“UserName”属性。出于兴趣,您必须映射每个表中的每个属性吗?看看生成的sql,也许这可以为您指明正确的方向。我看到了一些类似的示例(在官方的EF6教程中),它们有两个区别:首先,
SubscriberId
属性应该包含在所有拆分中。
SubscriberDetails
SubscriberProfile
的映射中缺少该属性。其次,在同一映射中,在
m.Properties(…
之后调用
m.ToTable(…
)。我不确定这是否是问题所在,但值得一试。另外,最好显示导致异常的实际查询。