我写了这样的课:
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但它没有改变任何东西.
谢谢您的帮助.
我想使用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) 我正在使用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) 我很好奇是否可以通过包含对象映射中间表.
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是否会为私有变量做这件事.会吗?
我希望这样做是因为如果必须公开来维护封装.
我想创建一个带有主键阴影的表(不在模型中)。
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)。
我有这个简单的模型:
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)