相关疑难解决方法(0)

实体框架 - 代码优先 - 无法存储列表<String>

我写了这样的课:

class Test
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required]
    public List<String> Strings { get; set; }

    public Test()
    {
        Strings = new List<string>
        {
            "test",
            "test2",
            "test3",
            "test4"
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

internal class DataContext : DbContext
{
    public DbSet<Test> Tests { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

运行代码后:

var db = new DataContext();
db.Tests.Add(new Test());
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

我的数据正在保存但只是保存Id.我没有任何表格,也没有适用于字符串列表的关系.

我究竟做错了什么?我也尝试制作字符串, virtual但它没有改变任何东西.

谢谢您的帮助.

.net c# entity-framework

82
推荐指数
9
解决办法
7万
查看次数

用于映射字符串列表或int列表的实体框架选项(List <string>)

我想使用EF存储包含基元列表的对象.

public class MyObject {
    public int Id {get;set;}
    public virtual IList<int> Numbers {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我知道EF无法存储,但我想知道解决这个问题的可能解决方案.

我能想到的2个解决方案是:

1. 创建一个具有Id和整数值的虚拟对象,例如

public class MyObject {
    public int Id {get;set;}
    public virtual IList<MyInt> Numbers {get;set;}
}

public class MyInt {
    public int Id {get;set;}
    public int Number {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

2. 将列表值存储为blob,例如

public class MyObject {
    public int Id {get;set;}

    /// use NumbersValue to persist/load the list values
    public string NumbersValue {get;set;}

    [NotMapped]
    public virtual IList<int> Numbers { …
Run Code Online (Sandbox Code Playgroud)

mapping orm entity-framework list

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

映射时转换值

我正在使用EF Code-First到现有的数据库方法,并IsActive在我的数据库中有一个字段.问题是该领域VARCHAR应该是什么时候boolean.我无法更改数据库架构.

数据库中的示例值为"Y" (true)或"N" (false)

映射时,我想将这些值转换为true/false,并使我的Entity类保持布尔值.

这可能吗?

我的实体和映射类如下,但我想将该IsActive字段更改为布尔值.

public class Employee
{
    public int ID { get; set; }
    public string SSN { get; set; }
    public string Email { get; set; }
    public string IsActive { get; set; }
}

public class EmployeeMap : EntityTypeConfiguration<Employee>
{
    public EmployeeMap()
    {
        this.ToTable("Employees");

        this.HasKey(t => t.ID);

        this.Property(t => t.ID).HasColumnName("ID_Employee");
        this.Property(t => t.SSN).HasColumnName("sReference");
        this.Property(t => t.Email).HasColumnName("Email");
        this.Property(t => t.IsActive).HasColumnName("IsActive");
    } …
Run Code Online (Sandbox Code Playgroud)

entity-framework asp.net-mvc-4

35
推荐指数
1
解决办法
3万
查看次数

实体框架通过包含对象,多对多

我很好奇是否可以通过包含对象映射中间表.

public class Subscriber : IEntity
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    private ChannelList _subscribedList { get; set; }
    public int NumSubscribedChannels { get { return _subscribedList.Count(); } }
}

public class HelpChannel : IEntity
{
    [Key]
    public int Id { get; set; }
    public string name { get; set; }
    public string category { get; set; }
    public int group { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我需要有一个订阅者表,频道表和一个中间表来将订阅者链接到他/她的频道.

是否可以将ChannelList对象中的列表映射到订阅者模型?

我认为这可能是不可能的,我需要有一个私人列表供EF映射.但我不确定EF是否会为私有变量做这件事.会吗?

我希望这样做是因为如果必须公开来维护封装.

c# asp.net-mvc entity-framework

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

影子主键

我想创建一个带有主键阴影的表(不在模型中)。

public class Person
{
    public string Name { get; set; }
}

public class PersonEntityTypeConfiguration : IEntityTypeConfiguration<Person>
{
    public void Configure(EntityTypeBuilder<Person> builder)
    {
        builder.Property?
        builder.HasKey("Id")????
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:实际情况是不同的类和值对象(DDD)。

c# ef-code-first entity-framework-core

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

为什么导航属性在其类是私有时不会填充?

我有这个简单的模型:

class Parent
{
   public int Id { get; set; }

   public virtual ICollection<Child> Children { get; set; }
}

class Child
{
   public int Id { get; set; }
   public int ParentId { get; set; }

   public virtual Parent Parent { get; set; }
}

class MyContext : DbContext
{
    public DbSet<Parent> Parents { get; set; }
    public DbSet<Child> Children { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Child>().HasRequired(s => s.Parent).WithMany(s => s.Children).HasForeignKey(s => s.ParentId);

        base.OnModelCreating(modelBuilder);
    } …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework

4
推荐指数
1
解决办法
127
查看次数