我想存储有关公司及其制造的汽车的详细信息。理想情况下,这将包括2个表:Companies
和Cars
以及外键引用。
但我希望使用SQL Server 2016的JSON和NoSQL功能。表结构将是表Companies
和表中的JSON列,其中包含有关汽车的所有信息。
要通过代码优先EF实现这一点,这里是我创建的类:
public class Company
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime dtEstablished { get; set; }
public List<Car> CarsManufactured { get; set; }
}
和
public class Car
{
[Key]
public string Name { get; set; }
public string Model { get; set; }
public DateTime MfgDate { get; set; }
public string Type { get; set; }
}
并将此属性添加到ApplicationDbContext
类
public DbSet<Company> Companies { get; set; }
然后在应用迁移后,而不是我想要的,数据库中有2个表与外键引用一样,正如所讨论的那样。
答案 0 :(得分:6)
这与使用EF的XML列相同。您必须自己序列化/反序列化列中的对象。
见
实体框架不支持本机XML数据类型。这意味着当实体映射到具有XML列的表时,XML列的等效实体属性是字符串。对象可以断开连接并序列化为XML。有关更多信息,请参阅序列化对象。
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/migration-considerations
有许多使用带有EF的XML列的例子,但你基本上需要这样的东西:
var tunnel: Option[SourceQueueWithComplete[Array[Byte]]] = None
override def receive: Receive = {
case i: InternalMessages.InitTunnel =>
log.info("Initializing tunnel")
tunnel = Some(i.sourceQueue)
case _: InternalMessages.Init =>
sender() ! InternalMessages.Acknowledged()
log.info("websocket stream initialized")
case _: InternalMessages.Completed =>
log.info("websocket stream completed")
case q: Question => {
tunnel match {
case Some(t) => t offer Answer()...
case None => log.error("No tunnel available")
}
}
}
object InternalMessages {
case class Acknowledged()
case class Init()
case class Completed()
case class InitTunnel(sourceQueue: SourceQueueWithComplete[Array[Byte]])
}